WPF:我可以绑定到另一个控件中所选对象的方法吗?

时间:2009-03-08 04:54:06

标签: wpf data-binding

我有两个WPF列表框。一个是列表列表(实际上是一个ObservableCollection列表),另一个是所有已知“Thingy”实例的列表。

这是我用于“thingy”类的datatemplate。

<DataTemplate DataType="{x:Type Model:Thingy}">
    <StackPanel Orientation="Horizontal">
        <CheckBox x:Name="ThingyInListCheckBox" Click="ThingyInList_Click"></CheckBox>
        <TextBlock Text="{Binding Path=ThingyName}"></TextBlock>
     </StackPanel> 

这是列表框的XAML:

<ListBox 
   Name="ListOfGroups"
   SelectionMode="Single">           
</ListBox>
<ListBox 
   Name="ListOfThingys"
   SelectionMode="Single">
</ListBox>

我对代码中设置的列表框有数据绑定,因为我太累了,无法弄清楚如何在XAML中执行此操作:

ListOfGroups.ItemsSource = InMemoryCache.ThingyGroups;
ListOfThingys.ItemsSource = InMemoryCache.Thingys;

我想要的是要检查“thingy”对象是否在列表中是“ListOfGroups”列表框中所选项目的“ThingyInListCheckBox”复选框。所以基本上我需要将它绑定到“ListOfGroups”.SelectedItem的“Contains”方法,同时将“ListOfThingys”.SelectedItem作为参数传递给它。

我很想在代码中完成这一切,但我正在努力更好地理解XAML数据绑定,因为我讨厌自己,我希望我受苦。

这是否可能,或者我是否遇到了软件开发历史中其他所有数据绑定系统中不可避免的“数据绑定墙”?

1 个答案:

答案 0 :(得分:0)

事实上,有很多方法可以做到这一点,你必须选择一个。它们都不是您当前代码的简单补充。然而,有一种方法可以让你获得更多的解决方案。实际上,它更像是一种模式,称为 MVVM (有些人可能会争论命名)。

以下是您的示例的一个小解释。 假设 ThingyGroup 具有 IsSelected 属性,该属性绑定到包含 ListBoxItem IsSelected 属性。同样,假设 Thingy 也有 Group 属性。然后,您可以使用 Group.IsSelected 作为绑定路径复选框。请注意, IsSelected 仍然是一个小问题,而 IsChecked 可以为空的布尔。

搜索 MVVM 应该为您提供具体的样本。