我有一个字典
public class TAGs :INotifyPropertyChanged{
private Dictionary<string, string[]> _items = new Dictionary<string,string[]>();
...............
public string[] Keys
{
get { return Items.Keys.ToArray(); }
}
}
我想创建 2 个列表,1 个列表用于键,另一个列表包含所选键的值,我试过这个但它不起作用
<ListBox x:Name="TagNameList" ItemsSource="{Binding Keys}"/>
<ListBox ItemsSource="{Binding Items[{Binding SelectedItem,ElementName=TagNameList}]}"/>
我将它们包含在一个网格中,它们的数据上下文是 TAG 的一个对象,第一个列表框工作正常,因为它简单地绑定(bind)到一个属性,但第二个列表不起作用 有帮助吗?
最佳答案
“{Binding Items[{Binding SelectedItem,ElementName=TagNameList}]}”
不是有效的 xaml。您不能在路径内进行绑定(bind),因为路径是在编译时构建的。
当我自己遇到这个问题时,我只是简单地将其他东西绑定(bind)到一个 ListBox
的 SelectedItem
上,然后当它收到更改通知时,也会触发一个 NotifyPropertyChanged
在另一个属性上公开 Items[selectedKey]
,我的第二个 ListBox
绑定(bind)到该属性。
xaml:
<ListBox x:Name="TagNameList" ItemsSource="{Binding Keys}" SelectedItem={Binding Selected}/>
<ListBox ItemsSource="{Binding ValueFromKey}"/>
C#:
string _selected;
public string Selected
{
get { return _selected; }
set
{
_selected= value;
OnPropertyChanged("Selected");
OnPropertyChanged("ValueFromKey");
}
}
public string[] ValueFromKey
{
get { return Items[Selected]; }
}
关于c# - WPF 中的绑定(bind)字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809643/