gpt4 book ai didi

c# - 在 WPF 中使用字典进行双向数据绑定(bind)

转载 作者:IT王子 更新时间:2023-10-29 04:22:02 26 4
gpt4 key购买 nike

我想在 WPF 中将 Dictionary<string, int> 绑定(bind)到 ListView。我想通过数据绑定(bind)机制更新 Values 中的 Dictionary。我不想只更改 Keys Values 。我也不关心向 Dictionary 添加新映射。我只想更新现有的。

将字典设置为 ItemsSourceListView 并不能完成此操作。它不起作用,因为 ListView 使用枚举器访问 Dictionary 的内容,并且该枚举的元素是不可变的 KeyValuePair 对象。

我当前的调查尝试使用 Keys 属性。我将其分配给 ItemsSourceListView 属性。这确实允许我显示 Keys,但我对 WPF 的数据绑定(bind)机制了解不够,无法访问 Values 中的 Dictionary

我发现了这个问题:Access codebehind variable in XAML 但似乎仍然无法弥合差距。

你们中有人知道如何使这种方法奏效吗?有没有人有更好的方法?

似乎,作为最后的手段,我可​​以构建一个自定义对象并将其粘贴在 List 中,我从中重新创建/更新我的 Dictionary 但这似乎是一种规避内置数据绑定(bind)功能的方法,而不是有效地利用它。

最佳答案

我不认为你能用字典做你想做的事。

  1. 因为 Dictionary 没有实现 INotifyPropertyChanged 或 INotifyCollectionChanged
  2. 因为它不会像您希望的那样允许双向绑定(bind)。

我不确定它是否完全符合您的要求,但我会使用 ObservableCollection和自定义类。

我正在使用 DataTemplate 来展示如何以两种方式对值进行绑定(bind)。

当然在此实现中不使用 Key,因此您可以只使用 ObservableCollection<int>

自定义类

public class MyCustomClass
{
public string Key { get; set; }
public int Value { get; set; }
}

设置项目来源

ObservableCollection<MyCustomClass> dict = new ObservableCollection<MyCustomClass>();
dict.Add(new MyCustomClass{Key = "test", Value = 1});
dict.Add(new MyCustomClass{ Key = "test2", Value = 2 });
listView.ItemsSource = dict;

XAML

<Window.Resources>
<DataTemplate x:Key="ValueTemplate">
<TextBox Text="{Binding Value}" />
</DataTemplate>
</Window.Resources>
<ListView Name="listView">
<ListView.View>
<GridView>
<GridViewColumn CellTemplate="{StaticResource ValueTemplate}"/>
</GridView>
</ListView.View>
</ListView>

关于c# - 在 WPF 中使用字典进行双向数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/800130/

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