绑定到类实例的属性,或从代码修改属性

时间:2010-06-24 21:58:14

标签: c# wpf properties binding

我在使用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}应该可以工作。

由于

2 个答案:

答案 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