从模板绑定到viewmodel的属性

时间:2012-05-25 10:07:25

标签: wpf templates xaml binding

我为我的GameViewModel

制作了一个视图

我有一些像这样的xaml

<UserControl.Resources>
    <DataTemplate DataType="{x:Type ViewModels:PlayerViewModel}">
        <StackPanel>
                 <Button 
                    Content="{Binding ?????}"
                    Command="{Binding WrongAnswerCommand}" />
                <TextBlock 
                        Text="{Binding Name}" />
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <ListBox Grid.Row="0"
             ItemsSource="{Binding Players}"
             IsSynchronizedWithCurrentItem="True">
     </ListBox>
</Grid>

所以,这里是一个可观察的收集玩家。

我需要将按钮内容绑定到GameViewModel的属性。

我应该使用什么?

1 个答案:

答案 0 :(得分:5)

基本上,您需要升级到更高级别才能获得完整视图模型。

这样的东西
Content="{Binding DataContext.MyContentPropertyName, 
                  RelativeSource={RelativeSource FindAncestor, 
                                                 AncestorType={x:Type ListBox}}}"

或者

Content="{Binding DataContext.MyContentPropertyName, 
                  RelativeSource={RelativeSource FindAncestor, 
                                             AncestorType={x:Type UserControl}}}"

其中MyContentPropertyNameGameViewModel中代表按钮内容的属性。

注意:从代码片段看,两个绑定似乎都会产生相同的结果,并将它们都添加到一个示例中,您可以选择要找到正确上下文的高度。