我在ListBox ItemTemplate中绑定到我的命令时遇到问题。我的命令在我的ViewModel中定义,但是因为我正在使用ItemsSource作为我的列表框,所以它被设置为DataContext。
<ListBox ItemsSource="{Binding CreatureModel.TypeFlagsValues}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" Command="{Binding SetCommand">
</CheckBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我尝试过使用RelativeSource
Command="{Binding SetCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vm:CreatureEditorViewModel}}}"
并且
<DataTemplate DataType="vm:CreatureEditorViewModel">
<CheckBox Content="{Binding}" Command="{Binding SetCommand}" CommandParameter="test">
</CheckBox>
</DataTemplate>
我觉得我在这里缺少一些简单的东西。
答案 0 :(得分:1)
你几乎用RelativeSource做对了。
试试这个:
Command="{Binding Path=DataContext.SetCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type ItemsControl}} }"
或者,您可以为列表框命名(例如&#34; _listBox&#34;并使用以下绑定:
Command="{Binding DataContext.SetCommand, ElementName=_listBox}
答案 1 :(得分:0)
尝试在Command上设置ElementName和Path;你必须在ListBox上设置x:Name,然后你可以引用父DataContext。
<ListBox x:Name="list" ItemsSource="{Binding CreatureModel.TypeFlagsValues}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" Command="{Binding ElementName=list,
Path=DataContext.SetCommand}">
</CheckBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>