C# 如何将UserControl的DependencyProperty正确绑定到其自己视图模型的属性?
编辑:将视图模型设置为C# 如何将UserControl的DependencyProperty正确绑定到其自己视图模型的属性?,c#,wpf,xaml,user-controls,C#,Wpf,Xaml,User Controls,编辑:将视图模型设置为DataContext 这里有很多问题,但它们都围绕着做一些时髦的代码隐藏的东西。我想要的是: 我有这样一个视图模型: public class FooViewModel : INotifyPropertyChanged { public Foo Foo { get { ...} set { ... } } } <UserControl.DataContext> <vm:FooViewMo
DataContext
这里有很多问题,但它们都围绕着做一些时髦的代码隐藏的东西。我想要的是:
我有这样一个视图模型:
public class FooViewModel : INotifyPropertyChanged {
public Foo Foo {
get { ...}
set { ... }
}
}
<UserControl.DataContext>
<vm:FooViewModel />
</UserControl.DataContext>
我在UserControl中定义如下:
public class FooViewModel : INotifyPropertyChanged {
public Foo Foo {
get { ...}
set { ... }
}
}
<UserControl.DataContext>
<vm:FooViewModel />
</UserControl.DataContext>
因此,我现在可以在其他地方使用控件时绑定Foo
属性
缺少的链接是:如何将UserControl的Foo
绑定到ViewModel的Foo
?
目前,我正在CodeBehind中使用一些复杂的事件处理来同步这些事件,但我认为在XAML中一定有这样做的方法,或者没有?如果您真的想这样做,您可以使用一种样式(我在参考资料中查看模型时使用您的原始代码):
但是,为
UserControl
使用视图模型不是一个好主意。使用依赖属性并直接从UserControl
中的控件绑定到它们。然后,当您使用UserControl
时,您将能够从外部绑定其依赖项属性。但是,从内部绑定它们(到单独的视图模型)通常不是一个好主意。因此您的视图模型不是控件的DataContext
?如果我将其设置为DataContext
如何将其绑定到依赖属性?UserControl不应该有自己的视图模型。相反,它应该在父控件或窗口的继承数据上下文中对视图模型进行操作?我真的应该用DependencyProperties
定义codebehind中的所有内容并在那里执行逻辑吗?您还没有告诉我们要对Foo dependency属性执行什么操作,但通常会将UserControl的XAML中的控件属性绑定到该属性。您可以通过使用相对资源绑定来实现这一点,例如
啊,好的。谢谢你的澄清。正如我在另一条评论中所述,我想做的是:推送到用户控件中的Foo
应该填充用户控件中的几个控件。有些控件的值“计算”了Foo
的一个值。例如,Nullable
应该传播到两个控件:一个复选框和一个用于编辑DateTime
的控件。如果复选框被选中,DateTime?
应该具有另一个控件的值,如果没有,它应该是null
。我同意克莱门斯在这方面的评论。总之,我想我回答了您最初的问题,即如何在xaml中绑定用户控件的依赖属性。