【问题标题】:WPF: Can I bind to a method of the selected object in another control?WPF:我可以绑定到另一个控件中选定对象的方法吗?
【发布时间】:2009-03-08 04:54:06
【问题描述】:

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

这是我用于“thingy”类的数据模板。

<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 数据绑定,因为我讨厌自己,我希望自己受苦。

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

【问题讨论】:

    标签: wpf data-binding


    【解决方案1】:

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

    这是对您的示例的一个小解释。 假设 ThingyGroup 有一个 IsSelected 属性,该属性绑定到包含 ListBoxItemIsSelected 属性。同样,假设 Thingy 也有一个 Group 属性。然后您可以使用 Group.IsSelected 作为绑定复选框的路径。请注意,IsSelected 是 bool 而 IsCheckednullable bool 仍然存在一个小问题。

    MVVM 上的搜索应该会为您提供具体示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2013-01-22
      相关资源
      最近更新 更多