Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# WPF-什么是适合多层的绑定方法?_C#_Wpf_Binding - Fatal编程技术网

C# WPF-什么是适合多层的绑定方法?

C# WPF-什么是适合多层的绑定方法?,c#,wpf,binding,C#,Wpf,Binding,我研究这个问题已经有一段时间了,我想知道正确的方法。我想使属性可以绑定到可重用的控件,然后在从另一个源更新绑定属性时更新控件本身 所以这是一种布局 我有一个页面(我们可以称之为第X页),它实现了一个视图模型(视图模型X)。视图模型X中有一个属性(布尔类型的RealPropertyX) 我有一个用户控件,它是一个具有视图和视图模型的滑动复选框 该视图具有依赖项属性: public bool ValueChecked { get { return (bool)GetValue

我研究这个问题已经有一段时间了,我想知道正确的方法。我想使属性可以绑定到可重用的控件,然后在从另一个源更新绑定属性时更新控件本身

所以这是一种布局

我有一个页面(我们可以称之为第X页),它实现了一个视图模型(视图模型X)。视图模型X中有一个属性(布尔类型的RealPropertyX)

我有一个用户控件,它是一个具有视图和视图模型的滑动复选框

该视图具有依赖项属性:

public bool ValueChecked
    {
        get { return (bool)GetValue(ValueCheckedProperty); }
        set { SetValue(ValueCheckedProperty, value); }
    }

    public static readonly DependencyProperty ValueCheckedProperty =
        DependencyProperty.Register("ValueChecked", typeof(bool), typeof(SliderCheckbox),
            new PropertyMetadata(false));
视图模型将bindable属性实现到我的用户控件的视图:

private bool _valueChecked;

    public bool ValueChecked
    {
        get { return _valueChecked; }
        set
        {
            _valueChecked = value;
            OnPropertyChanged(nameof(ValueChecked));
        }
    }
在我的SliderUserControl中

<CheckBox ... IsChecked="{Binding ValueChecked}"/>

在我的页面X视图中

<controls:SliderCheckbox ValueChecked="{Binding RealPropertyX, Mode=TwoWay}"/>


如果我的想法是正确的,那么从我的应用程序视图,我将绑定到我的用户控件视图上的dependency属性。用户控件本身绑定到视图模型中的属性。但是如何正确地链接这两个控件,使它们能够传递相同的值呢?

一般来说,
UserControl
不应该绑定到特定的视图模型。它通常从父元素继承其
DataContext
,这意味着您可以根据上下文将其依赖项属性绑定到多个不同的视图模型:

<local:UserControl1 SomeProperty="{Binding SomeSourceProperty}" />

我不确定是否正确理解了您的问题,但一般来说,
UserControl
与特定的视图模型无关。它通常从父元素继承其
DataContext
,这意味着您可以根据上下文将其依赖属性绑定到多个不同的视图模型,如何从UserControl视图中的dependency属性绑定到视图中的复选框?例如,使用相对源:
IsChecked=“{Binding ValueChecked,RelativeSource={RelativeSource AncestorType=UserControl}}”
<CheckBox ... IsChecked="{Binding ValueChecked,
    RelativeSource={RelativeSource AncestorType=UserControl}}" />