スライダコントロールと他のいくつかのコントロールで構成されたカスタムユーザーコントロール(SliderControl.xaml)があります。ユーザーコントロールには、スライダーコントロールのValueプロパティの依存プロパティがあります。WPF依存関係プロパティのバインドが正しく動作しない
public static DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(SliderControl), new PropertyMetadata(50.0));
public double Value {
get { return (double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, (double)value); }
}
私は、このように同様のStackPanelの内側に私のカスタムスライダコントロールを使用しているウィンドウを持っている:
<StackPanel>
<cl:SliderControl x:Name="valvePosUC" Minimum="0" Maximum="100" Title="Valve Position" Value="50" />
</StackPanel>
これはうまく動作します。値の依存関係プロパティの '50'は、スライダコントロールを50の値に適切に設定しています。
しかし、私がしたいのは、値依存プロパティをビューモデルに公開されているプロパティにバインドすることです私のウィンドウは現在バインドされています。
ここには、自分のウィンドウに設定されているDataContextがあります。
<Window.DataContext>
<ViewModel:LRS_1920x1080VM/>
</Window.DataContext>
そして、私は価値の依存関係プロパティは、このようなように定義されてバインドしたいと思います私のビューモデル(LRS_1920x1080VM)でプロパティ:
private double _valvePos_SliderValue { get; set; }
public double ValvePos_SliderValue {
get { return _valvePos_SliderValue; }
set {
_valvePos_SliderValue = value;
OnPropertyChanged("ValvePos_SliderValue");
}
}
だから、私は何をできるようにしたいと思います
<StackPanel>
<cl:SliderControl x:Name="valvePosUC" Minimum="0" Maximum="100" Title="Valve Position" Value="{Binding ValvePos_SliderValue}" />
</StackPanel>
私は、このようなような値依存関係プロパティをバインドしようとすると、しかし、それは動作しません。これは(値は以下の結合に注意してください)です。私の出力に表示されるエラーは、 -
System.Windows.Dataエラー:40:BindingExpressionパスエラー: 'ValvePos_SliderValue'プロパティが 'オブジェクト'に見つかりません 'SliderControl'(Name = 'valvePosUC') ' BindingExpression:Path = ValvePos_SliderValue; DataItem = 'SliderControl'(Name = 'valvePosUC');ターゲット要素は 'SliderControl'(Name = 'valvePosUC')です。プロパティ値が 'Value'(タイプ 'Double')です。 このエラーは、SliderControlのValvePos_SliderValueプロパティがどこにないのかを調べようとしているようです。 ValvePos_SliderValueは、ビューモデルのプロパティです。
は、あなたがどこかに自分自身にSliderControlののDataContextを設定していますか? – mm8
DataContextの問題のほかに、UserControlのValueプロパティへのバインディングが双方向であることも確認する必要があります。明示的にBinding式のModeを設定するか、依存関係プロパティーをBindsTwoWayByDefault'フラグに登録してください。 – Clemens
@クレメンス - ありがとう。私もそれをやるでしょう。 – Jagd