依赖属性未获取或设置值

时间:2012-06-01 14:34:13

标签: c# wpf user-controls dependency-properties

我在WPF中创建了一个用户控件,在后面的代码中我创建了一些依赖属性。

我在我的用户控件中添加了几个WPF控件,其中一个是进度条,所以我尝试做的是公开Value progressBar属性,如下所示:

     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并且它是正确的,因为这是唯一不起作用的绑定)

4 个答案:

答案 0 :(得分:1)

valueProperty&lt; ----&gt; &#34;值&#34;不匹配......(v / V):=)

答案 1 :(得分:1)

您是否尝试过Mode = TwoWay:

<MyUserControl Name="myControl" Value="{Binding ProgressBarValue, Mode=TwoWay}" > 

我还使用PropertyMetadata代替FrameworkPropertyMetadata

答案 2 :(得分:1)

尝试将依赖项属性的名称更改为PascalCased:

ValueProperty

您可能还需要查看BindsTwoWayByDefault以确保将对DP的更改写入源对象。

答案 3 :(得分:1)

事实证明我的问题是我没有实现INotifyPropertyChanged接口,因此,我所做的更改没有显示出来。但是因为我是WPF的新手,所以我不知道。

但是你只需要创建一个ObservableObject,然后你的viewModel类必须继承它。

Here是创建ObservableObject类以及如何从中继承的示例。