C# 依赖项属性未获取或设置值

C# 依赖项属性未获取或设置值,c#,wpf,user-controls,dependency-properties,C#,Wpf,User Controls,Dependency Properties,我在WPF中创建了一个用户控件,并在代码中创建了一些依赖属性 我在我的用户控件中添加了几个WPF控件,其中一个是进度条,因此我尝试公开Value progressBar属性,如下所示: public static readonly DependencyProperty valueProperty = DependencyProperty.Register( "Value", typeof(Double), typeof(MyUserCon

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

valueProperty“Value”不匹配。。。(v/v):=)

值属性“值”不匹配。。。(v/v):=)

您是否尝试过Mode=two-way:

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


我还使用了
PropertyMetadata
而不是
FrameworkPropertyMetadata
您是否尝试过Mode=TwoWay:

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


我还使用了
PropertyMetadata
而不是
FrameworkPropertyMetadata
尝试更改要使用的依赖项属性的名称:

ValueProperty

您可能还希望查看以确保对DP的更改写入源对象

尝试更改要使用的依赖项属性的名称:

ValueProperty

您可能还希望查看以确保对DP的更改写入源对象

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

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


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

结果表明,我的问题是我没有实现INotifyPropertyChanged接口,因此,没有显示我所做的更改。但由于我是WPF的新手,使用MVVM,我不知道这一点

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



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

谢谢你的回答,但根据我所读的,“valueProperty”是我的依赖属性,它注册了我的“Value”属性,不是吗?@Dante:你说得对,字段的名称无关紧要。当然,H.B.,这无关紧要。。。查看“依赖属性名称约定”以了解“属性及其支持的DependencyProperty字段的命名约定很重要”。@VincentPiel:我试过了,不管字段的名称如何。谢谢你的回答,但根据我所读的,“valueProperty”是我的依赖属性,它注册了我的“值”属性,不是吗?@但丁:你说得对,字段的名称无关紧要。当然,H.B.,这无关紧要。。。查看“依赖属性名称约定”以了解“属性及其支持的DependencyProperty字段的命名约定很重要”。@VincentPiel:我试过了,该字段的名称无关紧要。谢谢您的回复。我不知道这一点,我认为它是有用的,但它仍然不起作用。这真的很奇怪,因为我以前创建过一些依赖项,它们可以工作:(谢谢你的回复。我不知道,我认为这很有用,但它仍然不工作。这真的很奇怪,因为我以前创建过一些依赖项,它们可以工作:(?您是否在本地覆盖了DataContext,但现在它不会像您预期的那样继承另一个数据上下文?使用调试器,您可以查看是否进入回调吗?@H.B.我已经验证过,实际上我有更多可以工作的属性,因此这个问题对我来说太奇怪了,因为我的所有其他属性都可以工作fine@VincentPiel对我已经这样做了,而且我从来没有进入回调,但我知道它是有效的,因为如果在设计时我给我的属性添加了一个任意值,那么进度条会将其“进度”方面更改为smthg,比如:new FrameworkPropertyMetadata(new PropertyCallBack(ValuePropertyCallback))?您是否在本地覆盖了DataContext,但现在它不会像您预期的那样继承另一个数据上下文?使用调试器,您可以查看是否进入回调吗?@H.B.我已经验证过,实际上我有更多可以工作的属性,因此这个问题对我来说太奇怪了,因为我的所有其他属性都可以工作fine@VincentPiel对我已经这样做了,而且我从来没有进入回调,但我知道它是有效的,因为如果在设计时我给我的属性添加了一个任意值,那么进度条会将其“进度”方面更改为smthg,比如:new FrameworkPropertyMetadata(new PropertyCallBack(ValuePropertyCallback))