具有自定义用户控件的多阶段数据绑定

时间:2017-03-22 10:35:48

标签: c# wpf mvvm data-binding binding

我有一个带ViewModel的自定义控件。在此控件中,我以编程方式从控件的属性绑定到ViewModel。

当我使用控件并对属性进行绑定时,值不会更新。我有这个绑定

在customControl ViewModel

    private string _InitValue;

    public string InitValue
    {
        get { return _InitValue; }
        set { _InitValue = value; NotifyPropertyChanged();}
    }

在customControl中我设置了绑定

    initValueBinding = new Binding();
    initValueBinding.Source = LocalDataContext;
    initValueBinding.Path = new PropertyPath("InitValue");
    initValueBinding.Mode = BindingMode.OneWayToSource;
    initValueBinding.BindsDirectlyToSource = true;
    initValueBinding.UpdateSourceTrigger = UpdateSourceTrigger.Default;
    BindingOperations.SetBinding(this, PlusMinControl.InitValueProperty, initValueBinding);

InitValueProperty是一个依赖属性。

    public static DependencyProperty InitValueProperty = DependencyProperty.Register(nameof(InitValue), typeof(string), typeof(PlusMinControl), new PropertyMetadata( new PropertyChangedCallback(test)) );
    private static void test(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ;
    }
    public string InitValue
    {
        get { return ((string)(base.GetValue(PlusMinControl.InitValueProperty))); }
        set { base.SetValue(PlusMinControl.InitValueProperty, value); }
    }

用于执行customControl

     <plm:PlusMinControl InitValue="{Binding InitVal}" />

在后面的代码中,我设置了datacontext,并将我的InitVal定义为普通属性。

当我调试代码时,我可以跟踪更改,直到PropertyChangedCallback,但viewmodel中的属性没有更新。

谁能告诉我我做错了什么?我应该如何解决这个问题。

谢谢!

2 个答案:

答案 0 :(得分:0)

将BindingMode.OneWayToSource更改为BindingMode.TwoWay

答案 1 :(得分:0)

你已经倒置并混合了相同的init:

这使得绑定属性= viewmodel

<plm:PlusMinControl InitValue="{Binding InitVal}" />

这也是

"initValueBinding = new Binding();....."

这一定就够了,删除绑定代码

<plm:PlusMinControl InitialValue ="{Binding InitValue}" />

将属性更改为控件中的InitialValue