绑定到另一个控件的DataContext属性

11

我在一个应用游戏中有2个面板。

它们都绑定到不同的元素上。

    GameDetailsPanel.DataContext = game ;

    GameBoardPanel.DataContext = gameBoard ;

*游戏具有回合属性* .

    public Class Game 
    {
        public bool Turn{ get; set;}             
    } 

现在我需要将GameBoardPanel之一绑定到属性Turn的值上,

*例如:类似于以下内容*

   <Button Fill={Binding Source=GameDetailsPanel.DataContext , Path=Turn } ></Button>

我该如何在绑定中引用GameDetailsPanel.DataContext?

3个回答

22

为了搜索的便利,您可以按照此处详述的方法将数据上下文绑定到另一个控件的ElementName属性(链接)

在我的情况下,快速解决方案如下:

<TextBlock Text="{Binding ElementName=ucClientDetails, 
                          Path=DataContext.FullName}"></TextBlock>

其中,'ucClientDetails' 是一个用户控件,绑定了包含客户详细信息(包括全名)的视图模型。


5

我建议将游戏和游戏板属性放在一个包装视图模型上,然后设置视图的数据内容为包装视图模型。这样,在按钮的填充绑定中,你可以简单地引用视图模型上的适当属性:

public Class Wrapper_ViewModel
{
    public Game game{ get; set; } 
    public T gameBoard{ get; set; }           
}

<Button Fill={Binding Path=game.Turn} ></Button>

然而,对于更多一次性的场景,您可以使用相对源绑定属性并挂钩另一个元素的数据上下文,如此示例所示:从DataTemplate访问父DataContext


是的,我想到了,只是觉得也许我可以绕过这个问题,因为我只需要它在这个特定的地方使用。 - eran otzap
如果你正在寻找一个简单的一次性绑定选项,可以查看我上面的编辑。 - KodeKreachor

3

简单易用

<Button Fill="{Binding ElementName=GameDetailsPanel,Path=DataContext.Turn}"></Button>

这是元素绑定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接