Chaning ItemsSource DataContext

时间:2015-09-23 21:17:33

标签: c# xaml

我在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>

我觉得我在这里缺少一些简单的东西。

2 个答案:

答案 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>