1

私は2つの列を持つリストビューを持っています.1つはテキストボックスを含み、もう1つはチェックボックスを含みます. これらは、テキストボックスの文字列とチェックボックスのブール値を含むカスタム オブジェクトの ObservableCollection にバインドされます。

この記事のように、チェックボックスのチェックイベントでリストビューの行を強調表示するまで、すべてがうまく機能していました。

私の問題は、チェックボックスが ObservableCollection にバインドされなくなったことです。テキストボックスは正常にバインドされますが、チェックボックス宣言を次のように変更します。

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

これに:

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

チェックボックスのバインドを停止し、ブール値のステータスに関係なく、チェックボックスがすべてオフになった状態でリストビューが表示されます。私は何を間違っていますか?

4

2 に答える 2

2

持っていないRestrictedEditプロパティにバインドしようとしています。ListViewItemこのプロパティは、に格納されているビュー モデルで宣言されているDataContextため、次のように動作するはずです。

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

ただし、 simple の代わりにこのコードを使用する理由はわかりませんIsChecked="{Binding RestrictedEdit}"。からCheckBox継承するため、相対ソースを使用する理由はありません。DataContextListViewItem

于 2012-06-29T10:54:47.277 に答える
0

バインディングをそのまま (RelativeSource なし) にして、カスタム オブジェクト クラスを TargetType として持つスタイルまたは DataTemplate を使用し、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}"
于 2012-06-29T11:06:00.033 に答える