c# - WPF 中的绑定(bind)字典

标签 c# wpf xaml data-binding

我有一个字典

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)到一个 ListBoxSelectedItem 上,然后当它收到更改通知时,也会触发一个 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/

相关文章:

wpf - IsMouseOver 与 ListViewItem 的 IsSelected 重叠

c# - 需要一些东西在 WPF 中快速绘制许多图像

c# - WPF RichTextBox 拼写检查 ComException

.net - 使用 Style 在 WPF 中禁用列重新排序

c# - 更改 Canvas 内矩形的比例

c# - IPAddress.ToString 中的地址后面的百分号是什么?

c# - 如何显示asp.net缓存的内容?

c# - 需要参数 '@ID' ,但未提供?

c# - 如何在 ItemsControl 中绑定(bind) DataTemplate

c# - Active Directory 在 C# 中找不到所有用户