依赖项属性不获取或设置值
本文关键字:设置 获取 属性 依赖 | 更新日期: 2023-09-27 18:35:56
我在 WPF 中创建了一个用户控件,并在代码隐藏中创建了一些依赖项属性。
我向用户控件添加了几个 WPF 控件,其中一个是进度条,所以我尝试做的是公开 Value 进度栏属性,如下所示:
public static readonly DependencyProperty valueProperty = DependencyProperty.Register(
"Value",
typeof(Double),
typeof(MyUserControl),
new FrameworkPropertyMetadata(
ValuePropertyCallback));
private static void ValuePropertyCallback(DependencyObject controlInstance, DependencyPropertyChangedEventArgs args)
{
MyUserControl myUserControlInstance = (ProgressControl)controlInstance;
myUserControlInstance.progressBar.Value = (Double)args.NewValue;
}
public Double Value
{
get { return (Double)GetValue(valueProperty); }
set { SetValue(valueProperty, value); }
}
在 XAML 中,我写了这个:
<MyUserControl Name="myControl" Value="{Binding ProgressBarValue}" >
但它似乎不起作用,既没有设置也没有获得价值。
我有几个小时的时间来审查这个,但我无法意识到我做错了什么。
希望你能帮助我,提前谢谢你。
(注意:DataContext 是之前定义的,它是正确的,因为这是唯一不起作用的绑定)
value属性
<----> "Value" 不匹配... (v/v) :=)
你试过模式=双向吗:
<MyUserControl Name="myControl" Value="{Binding ProgressBarValue, Mode=TwoWay}" >
我也用PropertyMetadata
代替FrameworkPropertyMetadata
尝试将依赖项属性的名称更改为 PascalCased:
ValueProperty
您可能还需要查看 BindsTwoWayByDefault,以确保对 DP 的更改已写入源对象。
事实证明,我的问题是我没有实现INotifyPropertyChanged接口,因此,我所做的更改没有显示出来。但是由于我是使用 MVVM 的 WPF 新手,我不知道这一点。
但是你只需要创建一个 ObservableObject,然后你的 viewModel 类必须从它继承。
下面是创建 ObservableObject 类以及如何从中继承的示例。