gpt4 book ai didi

c# - WPF 绑定(bind)到带有类的字典

转载 作者:太空狗 更新时间:2023-10-29 23:38:02 25 4
gpt4 key购买 nike

我是 WPF 编程的新手,不是 C# 编码专家。

所以我有以下问题:我有很多不同的组合框和文本框。我想将它们绑定(bind)到后台的一个变量,因为我想用数据库中的数据填充组合框。

所以我在文件中创建了以下内容
liste.xaml.cs:

private Dictionary<string, Filter> _ctrlFilter;

public Dictionary<string, Filter> ctrlFilter {
get { return _ctrlFilter; }
set { _ctrlFilter = value; }
}

当我加载 liste.xaml 时,它使用以下代码初始化 ctrlFilter 字典:

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)) },
};

所以过滤器类(也在 liste.xaml.cs 中)看起来像这样:

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>();
}
}

现在我将其他 xaml 文件动态加载到 liste.xaml 文件中。例如 Fahrzeug_Allgemein.xaml

我有组合框,看起来像这样:

            <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>

您看到我试图从 Filter 类中获取 Items 属性,但它不起作用。在 Visual Studio 2015 输出中它说:

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')

我已经阅读了一些关于 INotifyPropertyChanged 的内容,但我不知道如何在我的案例中使用它。

如果你能帮助我,那就太好了。谢谢。

最佳答案

没想到答案这么简单。我只需要添加 { get;放; 到 Items 属性。

所以代码现在看起来像这样:

public class Filter
{
public string FilterName;
public Type ControlType;
public Type FromToType;
public bool Load;
public ObservableCollection<ComboBoxItem> Items { get; set; }
...

我认为这意味着 Items 属性只能通过此添加进行绑定(bind)。

关于c# - WPF 绑定(bind)到带有类的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31833332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com