2

我有一本字典

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 的对象,第一个列表框工作正常,因为它简单地绑定到一个属性,但第二个列表,没有任何帮助吗?

4

1 回答 1

0

"{Binding Items[{Binding SelectedItem,ElementName=TagNameList}]}"不是有效的 xaml。您不能在路径内进行绑定,因为路径是在编译时构建的。

当我自己遇到这个时,我只是简单地将其他东西绑定到SelectedItem一个ListBox,然后当它收到更改通知时,还要NotifyPropertyChanged在另一个暴露Items[selectedKey]我的第二个ListBox绑定的属性上触发。

xml:

<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]; }
}
于 2012-12-10T21:41:35.820 回答