我可以从代码中重新分配在XAML中声明为资源的对象吗?

时间:2010-02-02 14:33:39

标签: c# wpf data-binding xaml datacontext

我有一个我的数据类MyData,我通过数据绑定在我的gui中访问它。

我决定将窗口中主面板的DataContext设置为此对象的实例,以便将各种控件绑定到其成员。所以我可以在我的XAML中轻松引用它,我在MyData中创建了Window.Resources的实例,如下所示:

<local:MyData x:Key="myDataInstance"/>

然后我得到了对我的代码的引用,因为我有时也需要它。

MyData myDataInstance;

public MainWindow()
{
    InitializeComponent();
    myDataInstance = (MyData)FindResource("myDataInstance");
}

这很好用,但我也可以通过从文件反序列化来加载MyData的另一个实例。

myDataInstance = (myData)serializer.Deserialize(fileStream);

我想我可以简单地在代码中重新分配myDataInstance,但这似乎不起作用,因为我的gui没有改变以反映新数据。我认为重新分配是打破主面板的DataContext与myDataInstance之间的联系。

  1. 是否可以重新分配对象 像我一样在xaml中声明?
  2. 从XAML,是否可以访问 成员仅在代码中声明 (与FindResource()相反)?
  3. 如果是这样,怎么样?
  4. 感谢。 (顺便说一句,我当然可以用其他方法轻松解决这个问题,但我也只是对这个问题的答案感兴趣。)

1 个答案:

答案 0 :(得分:0)

你可以尝试

public class MainWindow {

...
  void UpdateResource()
  {
     myDataInstance = (myData)serializer.Deserialize(fileStream);
     this.Resources["myDataInstance"] = myDataInstance;
  }   
}

然后确保在您引用资源的位置使用 DynamicResource 引用而不是 StaticResource 引用。

据我所知,向资源字典中添加项目并使用DynamicResource引用是XAML可以使用代码的唯一方法。