Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将UserControl的DependencyProperty正确绑定到其自己视图模型的属性?_C#_Wpf_Xaml_User Controls - Fatal编程技术网

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中绑定用户控件的依赖属性。