1

我在 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

4 回答 4

1

valueProperty <----> "值" 不匹配... (v/V) :=)

于 2012-06-01T14:36:50.410 回答
1

您是否尝试过 Mode=TwoWay:

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

我也PropertyMetadata用过FrameworkPropertyMetadata

于 2012-06-01T14:45:27.327 回答
1

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

ValueProperty

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

于 2012-06-01T14:47:48.633 回答
1

原来我的问题是我没有实现 INotifyPropertyChanged 接口,所以我所做的更改没有显示出来。但由于我是使用 MVVM 的 WPF 新手,所以我不知道。

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

是一个创建 ObservableObject 类以及如何从它继承的示例。

于 2012-06-01T17:38:13.813 回答