我有一个我的数据类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
之间的联系。
FindResource()
相反)?感谢。 (顺便说一句,我当然可以用其他方法轻松解决这个问题,但我也只是对这个问题的答案感兴趣。)
答案 0 :(得分:0)
你可以尝试
public class MainWindow {
...
void UpdateResource()
{
myDataInstance = (myData)serializer.Deserialize(fileStream);
this.Resources["myDataInstance"] = myDataInstance;
}
}
然后确保在您引用资源的位置使用 DynamicResource 引用而不是 StaticResource 引用。
据我所知,向资源字典中添加项目并使用DynamicResource引用是XAML可以使用代码的唯一方法。