【发布时间】:2017-08-14 09:59:57
【问题描述】:
我有一个带有 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}" />
在后面的代码中,我设置了数据上下文,并将 InitVal 定义为普通属性。
当我调试代码时,我可以跟踪更改直到 PropertyChangedCallback 但视图模型中的属性没有更新。
谁能告诉我我做错了什么?以及我应该如何解决这个问题。
谢谢!
【问题讨论】:
-
这是什么
InitValue="{Binding InitVal}":ViewModel 中的InitVal属性在哪里?您在 ViewModel 中显示InitValue,奇怪的是您的 dp 和 VM 属性具有相同的名称...您还在做为什么 xaml 和代码隐藏绑定? -
编码绑定在控件 PlusMinControl 中进行。 xaml 绑定是实现 PlusMinControl 的地方。 InitVal 在实现的数据上下文中定义。我希望这能澄清我的结构。
标签: c# wpf mvvm data-binding binding