如何在代码后台访问在XAML中创建的DataContext类实例?

8

MyData 是一个简单存储ColorName属性的类。

在XAML中,我可以通过以下方式为我的XAML数据上下文创建一个实例:

<c:MyData x:Key="myDataSource">

现在,

如何在代码后台访问并更改存储在“MyData”实例中的ColorName(该实例是使用“myDataSource”键在XAML中创建的)?

希望问题清晰明了。我想通过编程方式更改颜色。如何获取MyData类实例?谢谢。

<DockPanel
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:c="clr-namespace:SDKSample">
  <DockPanel.Resources>
    <c:MyData x:Key="myDataSource"/>
  </DockPanel.Resources>
  <DockPanel.DataContext>
    <Binding Source="{StaticResource myDataSource}"/>
  </DockPanel.DataContext>
  <Button Background="{Binding Path=ColorName}"
          Width="150" Height="30">I am bound to be RED!</Button>
</DockPanel>

1
请考虑一下我在这个问题上的观点 - Federico Berasategui
@HighCore 当然很有趣 +1 但盲目地---然而鉴于我当前的能力水平,没有发表评论的立场 :p 我相信211个苹果之后我会有自己的看法 - iAteABug_And_iLiked_it
1个回答

17

要从代码后台访问资源,请为 DockPanel 指定一个名称,然后执行以下操作:

var resource = dockPanel.Resources["myDataSource"];

或者,您可以获取它的DataContext:

var dataContext = dockPanel.DataContext as MyData

4
你的“替代方案”是最高级的。 - Scott Solmer
我正在做类似的事情: 我在尝试从textBox读取文本的按钮的事件处理程序中说以下内容 var dataContext = myWindow.DataContext as myClass; 然后将其用作 System.Windows.MessageBox.Show(dataContext.Text);, 但是 dataContext 保持为null。可能出了什么问题? - miguello

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