2016-11-03 11 views
1

私は自分のDataContextが私のViewModelに設定されているListViewを持っています。 ListView.ItemsSourceは、ViewModelのCollectionプロパティに設定されています。このViewModelにMyIndexというプロパティがあります。 MyIndexの値は、プロジェクトの実行中に変更されます。XAMLのListView.ItemTemplate内からListView DataContextを参照するにはどうすればよいですか?

MyIndexの値に基づいて各ListViewItemのアスペクトを変更できるように、ListViewのItemTemplateからXAML 'MyIndex'にアクセスする方法が必要です。

私はTemplatedParentを使用できませんし、.ParentがListViewではないため、バインディング内のListViewItemの.Parentプロパティは使用できません。

ここでは、私が意味するところをより良く説明するための疑似XAMLをいくつか示します。

  <ListView ItemsSource="ItemsCollection"> 
 
       <ListView.ItemTemplate> 
 
        <ItemContainerTemplate> 
 
         <Grid Background="{Binding <some xaml to reference MyIndex Property of ListView.DataContext to use in Converter>}"> 
 

 
         </Grid> 
 
        </ItemContainerTemplate> 
 
       </ListView.ItemTemplate> 
 
      </ListView>

私はので、私は、これは理にかなって願っていますWPFで経験していませんよ。

事前のお手伝いがあります。

+0

「MyIndex」がデータアイテムクラスのプロパティでないのはなぜですか? – Clemens

+0

@Clemens、MyIndexは、背景を変更したい特定のListViewItemのインデックスを表します。したがって、MyIndexが変更されると、それぞれのListViewItemのバックグラウンドが実行され、前のListViewItemが古い背景に戻ります。私はXAMLがこれを行うと思ったが、そうではなかった。代わりに、すべてのListViewItemを変更します。 – Cleve

答えて

2

これはトリックを行う必要があります。これにより、子の親のDataContextを使用することができます。

 <ListView ItemsSource="ItemsCollection"> 
     <ListView.ItemTemplate> 
      <ItemContainerTemplate> 
       <Grid Background="{Binding DataContext.MyIndex, RelativeSource={RelativeSource AncestorType=ListView}}"> 

       </Grid> 
      </ItemContainerTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
+0

こんにちはルプシルヴィウ、ご返信ありがとうございます。私はこれがうまくいくかどうか確認するのに問題があります。私はあなたの言い方に拘束力を変えました。私はコードがMyIndexプロパティを取る私のValueConverterに足を踏み入れるのを見ることができます。コンバーターはColors.Redを返しますが、バインディングが発生しているグリッドの背景は変わりません。 – Cleve

+1

@Cleve Backgroundプロパティの型が 'Brush'なので、コンバーターはColorではなくBrushを返さなければなりません。 'ブラシ.Red'。 – Clemens

+0

@クレメンス、ありがとう! – Cleve

関連する問題