如何使用更改通知绑定到字典项
本文关键字:字典 绑定 通知 何使用 | 更新日期: 2023-09-27 18:25:19
考虑以下XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBlock Text="{Binding Dic[foo]}" />
<Button Content="test" Click="Button_Click" />
</StackPanel>
</Window>
支持代码:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public Dictionary<string, string> Dic { get; set; }
public MainWindow()
{
InitializeComponent();
Dic = new Dictionary<string, string>();
Dic.Add("foo", "bar");
DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// Doesn't work :(
Dic["foo"] = "YEAH!";
}
}
}
这里TextBlock
正确地绑定到字典项"foo"。但是,当其值发生变化时,如何使其更新?
您需要使用Binding.IndexerName
作为属性名称为索引器发出更改通知,您可能需要将其封装在继承或管理Dictionary
的新类中。
让dictionary成为dictionary(字符串的,DescriptionObject)其中DescriptionObject具有通知字符串属性,实现PropertyChanged并具有ToString重写
然后将(foo,fooDescription)添加到dictionary中。如果您在ButtonClick处理程序中更改fooDescription,那么TextBlock也会更改。
您需要将索引器添加到代码中,如下所示:
private Dictionary<string, string> Dic { get; set; }
public string this[string key]
{
get { return Dic[key]; }
set
{
if(key != null && Dic[key] != value)
Dic[key] = value;
OnPropertyChanged("Item[" + key + "]");
}
}
然后,在xaml中,您绑定到索引器,当项目更改时,它将被通知:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBlock Text="{Binding [foo]}" />
<Button Content="test" Click="Button_Click" />
</StackPanel>
</Window>