WPF Listview&复选框 - 使用相对源时的绑定问题

时间:2012-06-29 10:41:58

标签: c# wpf listview checkbox wcf-binding

我有一个包含两列的列表视图,一列包含文本框,另一列包含复选框。这些绑定到包含文本框字符串的自定义对象的ObservableCollection和复选框的布尔值。

一直运行良好,直到我尝试复选框的检查事件突出显示它是列表视图中的行,如this article中所示。

我的问题是复选框不再绑定到ObservableCollection。文本框绑定正常,但更改了checbox声明:

<CheckBox IsChecked="{Binding RestrictedEdit}"/>

到此:

<CheckBox IsChecked="{Binding RestrictedEdit, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/>

停止复选框绑定,显示列表视图,复选框全部取消选中,不选择布尔值的状态。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您正在尝试绑定RestrictedEdit属性,而ListViewItem没有。此属性在视图模型中声明,该模型存储在DataContext中,因此这应该有效:

<CheckBox IsChecked="{Binding DataContext.RestrictedEdit,
                              RelativeSource={RelativeSource FindAncestor,
                                              AncestorType={x:Type ListViewItem}}}"/>

但是,我认为没有理由使用此代码而不是简单的IsChecked="{Binding RestrictedEdit}"CheckBoxDataContext继承ListViewItem,因此没有理由使用相对来源。

答案 1 :(得分:0)

让绑定原样(没有RelativeSource)并使用相似的样式或DataTemplate将自定义对象类作为TargetType,并在RestrictedEdit上设置DataTrigger。 样式的例子:

<Style x:Key="MyStyle" TargetType="MyClass">
  <Setter Property="BackGround" Value="White" />
  <Style.Trigger>
     <DataTrigger Binding="{Binding RestrictedEdit}" Value="False">
         <Setter Property="BackGround" Value="Gray" />
      </DataTrigger>
  </Style.Trigger>
</Style>

在您的应用程序资源中(在App.xaml中)定义此样式。 然后在列表视图中,使用:

ItemContainerStyle="{StaticResource MyStyle}"