我有一个窗口,里面有一个usercontrol。此usercontrol的 RequestObject 属性绑定到窗口的ViewModel的 SearchArgumentObject 属性。
这是我的窗口类
的列表<Grid DataContext="{Binding SearchArgumentObject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<guiLib:RegCardSearchForm x:Name="SearchParametrsUC" Grid.Row="1" RequestObject="{Binding .,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
在Usercontrol类中,我创建了依赖属性:
这是我的userControl类
的列表 public static DependencyProperty RequestObjectProperty = DependencyProperty.Register("RequestObject", typeof(RegistrationCardSearch), typeof(RegCardSearchForm));
public RegistrationCardSearch RequestObject
{
get
{
return (RegistrationCardSearch)GetValue(RequestObjectProperty);
}
set
{
SetValue(RequestObjectProperty, value);
}
}
在usecontrol的级别上,一切正常,RequestOject属性也发生了变化。
但在我的窗口类中,我看不到对在usercontrol中创建的 SearchArgumentObject 属性的修改。
如何获得已修改的属性值?我认为对这个问题的回答非常微不足道,但我找不到解决方案。
答案 0 :(得分:1)
在网格上设置DataContext除了破坏属性的双向链接外没有做任何事情。跳过额外的步骤,将VM属性绑定到要从中获取更改的控件属性:
<Grid>
<guiLib:RegCardSearchForm x:Name="SearchParametrsUC" Grid.Row="1"
RequestObject="{Binding SearchArgumentObject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
答案 1 :(得分:0)
Window类的代码是将DataContext
的{{1}}设置为从树的另一个对象Grid
上的属性绑定获得的属性。你在其他地方设置了窗口的DataContext
吗?
假设提供DataContext
的对象名为SearchArgumentObject
。在Window的代码隐藏中,您将拥有以下代码(例如,在构造函数中):
SearchWindowViewModel
现在,DataContext = new SearchWindowViewModel();
公开的所有属性都可用于Window。要将SearchWindowViewModel
绑定到UserControl的SearchWindowViewModel.SearchArgumentObject
属性,您将拥有以下XAML:
RequestObject
如果您不想设置Window <Grid>
<guiLib:RegCardSearchForm x:Name=SearchParametersUC Grid.Row=1
RequestObject={Binding SearchArgumentObject />
</Grid>
,可以使用与上面使用的相同类型的代码设置网格DataContext
,并且XAML中的绑定将保持不变
希望有所帮助。