C# kodlamada profesyonel değil, WPF programlamasında yeniyim.WPF Sınıflandırılmış sözlüğe bağlama
Yani şu sorunum var: Çok fazla farklı combobox ve textbox var. Onları arka planda bir değişkene bağlamak istiyorum çünkü bir Veritabanından Veri ile açılan kutuları doldurmak istiyorum. Ben liste.xaml yüklediğinizde
private Dictionary<string, Filter> _ctrlFilter;
public Dictionary<string, Filter> ctrlFilter {
get { return _ctrlFilter; }
set { _ctrlFilter = value; }
}
aşağıdaki kodla ctrlFilter Sözlük başlatır:
yüzdenliste.xaml.cs dosyasında aşağıdaki yarattı
ctrlFilter = new Dictionary<string, Filter>
{
//ComboBox
{"hersteller", new Filter("Hersteller", typeof(ComboBox)) },
{"fahrzeugart", new Filter("Fahrzeugart", typeof(ComboBox), false) },
//TextBox
{"baujahr", new Filter("Baujahr", typeof(TextBox), true, typeof(short)) },
{"anschaffungswert", new Filter("Anschaffungswert", typeof(TextBox), true, typeof(decimal)) },
{"finanz_restwert", new Filter("Restwert", typeof(TextBox), true, typeof(decimal)) },
//Others
{"zugelassen", new Filter("Zugelassen", typeof(DatePicker), true, typeof(DateTime)) },
{"vstabzug", new Filter("Vorsteuerabzug", typeof(CheckBox), true, typeof(bool)) },
};
Bu nedenle filtre sınıfı (liste.xaml.cs modelinde de bulunmaktadır) şöyle görünür:
public class Filter
{
public string FilterName;
public Type ControlType;
public Type FromToType;
public bool Load;
public ObservableCollection<object> Items;
public object SelectedFilter;
public object From;
public object To;
public Filter(string name, Type type, bool load = true, Type ftType = null)
{
Reset();
FilterName = name;
ControlType = type;
Load = load;
FromToType = ftType;
}
public void Reset()
{
From = null;
To = null;
SelectedFilter = null;
Items = new ObservableCollection<object>();
}
}
Şimdi, diğer xaml dosyalarını dinamik olarak liste.xaml dosyasına yüklüyorum. Örneğin Fahrzeug_Allgemein.xaml Orada
Şöyle ki, comboboxes var:
<StackPanel>
<Label Content="Hersteller:" Target="{Binding ElementName=cmb_hersteller, Mode=OneWay}"/>
<ComboBox x:Name="cmb_hersteller" Fahrzeuge:FilterExtension.FilterName="hersteller" Width="120" ItemsSource="{Binding ctrlFilter[hersteller].Items}" SelectedIndex="0" SelectionChanged="cmb_hersteller_SelectionChanged"/>
</StackPanel>
Sen Filtre sınıfından Öğeler özelliği almaya çalıştı görüyoruz, ancak yok iş. Visual Studio 2015 çıktısında şöyle der:
System.Windows.Data Error: 40 : BindingExpression path error: 'Items' property not found on 'object' ''Filter' (HashCode=44888241)'. BindingExpression:Path=ctrlFilter[hersteller].Items; DataItem='liste' (Name=''); target element is 'ComboBox' (Name='cmb_hersteller'); target property is 'ItemsSource' (type 'IEnumerable')
Ben zaten bir şey hakkında INotifyPropertyChanged
okumak ama benim durumumda nasıl kullanılacağını bilmiyorum. Bana yardım edebilecek olursanız çok iyi olur.
Teşekkür ederiz.
Bir sözlüğe bağlanıyorsunuz ... Belki bu size yardımcı olacaktır: http://stackoverflow.com/questions/3334128/binding-a-dictionarys-key-and-value-in-a-listbox- with-wpf – derape