2017-05-15 11 views
-1

このバインディングを使用するにはいくつか問題があります。 SettingCollection内には、すべてenumプロパティを持つ複数のオブジェクトがあります。私はこれの値が何であるかに基づいてコントロールを生成したいと思います。しかし、データトリガでこの値をチェックすると、動作しません。DataTrigger with Property = ItemControl.ItemTemplate

誰でもこれを達成する方法についていくつかの洞察を提供できますか?

<Window.Resources> 
     <DataTemplate x:Key="CheckboxNode"> 
      <CheckBox IsChecked="{Binding Status}" Margin="0,5,0,0"> 
       <ContentPresenter Content="{Binding DisplayName}"/> 
      </CheckBox> 
     </DataTemplate> 
     <DataTemplate x:Key="TextboxNode"> 
      <TextBox Text="Badgers"></TextBox> 
     </DataTemplate> 
</Window.Resources> 
<ItemsControl ItemsSource="{Binding SettingCollection}"> 
        <ItemsControl.Style> 
         <Style TargetType="ItemsControl"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Type}" Value="checkbox"> 
            <Setter Property="ItemsControl.ItemTemplate" Value="{StaticResource CheckboxNode}" /> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding Type}" Value="textbox"> 
            <Setter Property="ItemsControl.ItemTemplate" Value="{StaticResource TextboxNode}" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ItemsControl.Style> 
       </ItemsControl> 
+0

あなたのビューモデルにenumプロパティを入力しますか? checkboxとtextboxで可能なenumの値は?もし私があなただったら、私はあなたのdatatriggerがあなたのenumの値を認識しないと思うので、型を持ったconveterを作り、プリミティブな値(int、boolなど)を返します。または、DataTriggerタグ内では、Enum名前空間にValue = "{x:Static myenum:Type.checkbox}">を使用する必要があります:xmlns:myenum = "clr-namespace:YourEnumNamespace; assembly = YourAssembly"ウィンドウタグ) –

+0

@PéterHidvégiはい "Type"は、SettingCollectionに含まれているオブジェクトSettingNodeのパブリックプロパティです –

+0

@PéterHidvégiこれは、データコントロールに何があってもitemscontrolがそれぞれ "Tugboat.Nodes.SettingNode"を表示しているようですテンプレートのチェックボックス/テキストフィールドの代わりにコレクション内のアイテム –

答えて

1

TypeプロパティがSettingNodeクラスであり、かつSettingCollectionはSettingNodeオブジェクトのコレクションである、そして、あなたのDatatriggersに結合が間違っている場合。 DataTriggersはItemsControl DataContext(SettingCollectionを持つクラス)のTypeプロパティを探します。 DataTemplateSelectorを使用してみてくださいhttps://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector(v=vs.110).aspx

+0

これは私が探していたものでした!ありがとうございました! –

関連する問題