绑定不适用于DependencyProperty

时间:2010-10-12 12:20:55

标签: c# wpf xaml data-binding dependency-properties

我有一个窗口,里面有一个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 属性的修改。

如何获得已修改的属性值?我认为对这个问题的回答非常微不足道,但我找不到解决方案。

2 个答案:

答案 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中的绑定将保持不变

希望有所帮助。