两个自定义列表框之间的DataBinding

时间:2014-05-29 23:54:55

标签: c# wpf data-binding listbox datacontext

我想要什么

我的ListBox内有两个自定义UserControl

我的自定义ListBox1有一个private List<Element> SubList,它是其元素的子列表。此自定义控件实现PropertyChangedINotifyPropertyChanged等。

我的ListBox2必须显示此子列表。

他们两人也在使用DataTemplate,但我不认为这会是问题,所以我不会在这里处理这部分内容。如果我错了,请告诉我,我会更新我的例子。

What I want

我尝试了什么

<UserControl>
        <local:ListBox1 x:Name="ListBox1" 
                         DataContext="{Binding MyFullList}"/>
        <local:ListBox2 x:Name="ListBox2" 
                        DataContext="{Binding ElementName=ListBox1}"
                        Content="{Binding Path=SubList}"/>
</UserControl>

它让我进入我的ListBox2:

(收藏)

我尝试使用一个元素而不是元素列表,它正在工作。 我也尝试过这样:

<UserControl>
            <local:ListBox1 x:Name="ListBox1" 
                             DataContext="{Binding MyFullList}"/>
            <local:ListBox2 x:Name="ListBox2" 
                            DataContext="{Binding ElementName=ListBox1, Path=SubList}"/>
</UserControl>

但它没有给我什么......我也尝试使用ObservableCollection代替List,但仍然没有。

我的问题

我应该使用ListBox2 SubList填充ListBox1的约束力是什么? 我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果没有看到你的Model类,这只是一个猜测,但是如果要有一个包含子列表的模型,你可以绑定到ListBox1.SelectedItem并使用Sublist属性

 <local:ListBox2 x:Name="ListBox2" DataContext="{Binding ElementName=ListBox1, Path=SelectedItem.SubList}"/>

答案 1 :(得分:0)

我找到了解决问题的方法。我尝试使用已填充的列表并且它正在运行。所以问题出在更新ListBox2而不是DataBinding

我不知道为什么,但名为List的{​​{1}}未更新SubList,即使它正在触发ListBox2事件等。

我只需要将OnPropertyChanged更改为SubList,以下代码正确执行ObservableCollection

DataBinding