1

WPF でユーザー コントロールを作成し、コード ビハインドでいくつかの依存関係プロパティを作成しました。

ユーザー コントロールにいくつかの WPF コントロールを追加しました。そのうちの 1 つは進行状況バーです。そのため、次のように 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 に答える