【问题标题】:Binding to a property of the DataContext of another control绑定到另一个控件的 DataContext 的属性
【发布时间】:2012-03-27 23:26:11
【问题描述】:

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

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

    GameDetailsPanel.DataContext = game ;

    GameBoardPanel.DataContext = gameBoard ;

*游戏有一个 Turn 属性 *

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

现在我需要将其中一个 GameBoardPanel 绑定到 Property Turn 的值,

*例如:类似于 *

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

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

【问题讨论】:

    标签: wpf data-binding


    【解决方案1】:

    简单地使用

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

    此元素绑定。

    【讨论】:

      【解决方案2】:

      为了搜索者的利益,您可以绑定到另一个控件的数据上下文,详细说明here

      我的快速解决方案如下:

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

      其中“ucClientDetails”是绑定到包含客户端详细信息(包括 FullName)的视图模型的用户控件。

      【讨论】:

        【解决方案3】:

        我建议将您的游戏和 gameBoard 属性放在包装器视图模型上,然后将视图的数据上下文设置为包装器视图模型。这样,在按钮的 Fill 绑定中,您可以简单地引用视图模型上的适当属性:

        public Class Wrapper_ViewModel
        {
            public Game game{ get; set; } 
            public T gameBoard{ get; set; }           
        }
        
        <Button Fill={Binding Path=game.Turn} ></Button>
        

        但是,对于更多一次性场景,您可以使用相对源绑定属性并挂钩另一个元素数据上下文,如下例所示: Access parent DataContext from DataTemplate

        【讨论】:

        • 是的,我想到了,我只是想也许我可以解决这个问题,因为我只需要在这个特定的地方使用它。
        • 如果您正在寻找简单的一次性绑定,请查看我上面的编辑以获取另一个选项。
        猜你喜欢
        • 2011-11-14
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多