【问题标题】:WPF: How to bind to different objects?WPF:如何绑定到不同的对象?
【发布时间】:2011-01-15 07:48:43
【问题描述】:

我有一个包含复选框的列表框。 Xaml 看起来像这样:

<ListBox x:Name="lbContactTypes">
    <ListBox.ItemTemplate>
        <HierarchicalDataTemplate>
            <CheckBox Content="{Binding Path=Description}" IsChecked="{Binding Path=ContactTypes, Converter={x:Static Classes:ListContainsConverter.Instance}, ConverterParameter=1}" />
        </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我在我的代码中绑定 ItemsSource,如下所示:

lbContactTypes.ItemsSource = GetLeadContactTypes();

到目前为止一切顺利。生成了三个具有正确内容的复选框。现在我想将 IsChecked 属性设置为其他一些对象,该对象包含我正在使用的实体的当前数据。

为了澄清一点,我已将窗口的 DataContext 设置为 Customer 对象,其中包含 ContactTypes 的 ObservableCollection,我想将这些 ContactTypes 绑定到 IsChecked 属性,以便检查复选框的属性。我通过调用返回 bool 的 ListContainsConverter 转换器来检查 ObservableCollection 是否包含所需的整数。这可能吗?

【问题讨论】:

    标签: wpf xaml binding listbox checkbox


    【解决方案1】:

    我已经找到了解决方案。我将 IsChecked 绑定到 Window.DataContext,所以 xaml 看起来像这样:

    <ListBox x:Name="lbContactTypes">
        <ListBox.ItemTemplate>
            <HierarchicalDataTemplate>
                <CheckBox Content="{Binding Path=Description}" IsChecked="{Binding Path=DataContext.ContactTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}, Converter={x:Static Classes:ListContainsConverter.Instance}, ConverterParameter=1}" />
            </HierarchicalDataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    我仍然有兴趣了解是否存在更好的解决方案。告诉我。

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2011-02-16
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      相关资源
      最近更新 更多