我在使用WPF进行一些数据绑定时遇到了麻烦。我有一个班级来保存各种数据。我希望它所持有的数据在不同的窗口中绑定到文本框。我发现的一切都表明了这一点:
<Grid.Resources>
<c:PropertyModel x:Key="propMod" />
</Grid.Resources>
<Grid.DataContext>
<Binding Source="{StaticResource propMod}"/>
</Grid.DataContext>
这个问题是它在某个地方被实例化,我无法进入这个'propMod'。我想从代码中改变一些propMod的属性。
我尝试过的另一种方法是在代码隐藏中创建一个实例,例如
PropertyModel propMod = new PropertyModel();
但是我无法让WPF绑定到这个,尽管文档声称{Binding propMod.PropA}应该可以工作。
由于
答案 0 :(得分:1)
您想要的关键是将DataContext(您的Window,Grid等)设置为PropertyModel的实例。
通常,我会在View的代码隐藏中执行此操作,如下所示:
var viewModel = new SomeAwesomeViewModel();
DataContext = viewModel;
可以在构造函数中,也可以在Window的Loaded事件的事件处理程序中。
如果您希望能够从其他代码中操作ViewModel的某些属性,那么您可能应该在其他地方实例化ViewModel(例如,在另一个知道需要进行哪些修改的ViewModel内),然后传递实例化并将ViewModel修改为要使用的View。我通过事件和包含ViewModel的自定义EventArgs参数做了类似的事情。
答案 1 :(得分:1)
您应该能够使用代码方法 - 但是您需要将Grid的DataContext显式设置为新实例化的“propMod”变量。
如果要使用第一种方法,可以从代码访问资源。你需要找到网格,然后执行:
Grid grid = MethodToGetTheGridInstance();
PropertyModel propMod = (PropertyModel)grid.FindResource("propMod");
有关从代码中获取资源的详细信息,see MSDN。