2016-11-01 7 views
0

DependecyProperty-bindingに奇妙な問題があります。WPFのUserControlのDependencyPropertyへのバインドが期待どおりに機能しない

public static readonly DependencyProperty TestValueProperty = DependencyProperty.Register("TestValue", typeof(string), typeof(Test), new PropertyMetadata(default(string))); 

public string TestValue 
{  
    get { return (string)GetValue(TestValueProperty); } 
    set { SetValue(TestValueProperty, value); } 
} 

このプロパティは使用されている:私は背後にあるコードで定義されたDependencyPropertyを持っているユーザーコントロールは、持っている同じ不要な行動

を持っていること、i'veは、いくつかのダミーコントロールを作成したシンプルな質問を保つために XAMLで:

<Label Content="{Binding TestValue}" /> 

このコントロールは、このような別の制御に使用する必要があります。

<views:Test TestValue="{Binding Settings.Setting123}" /> 

Settingsは、プロパティとしてviewmodelで定義されています。

Settings.Setting123の内容は、私のusercontrolのラベルに表示されません。

いくつかの修正値を書き込む代わりに、結合、それが正常に動作します:

<views:Test TestValue="Test" /> 

しかし、もちろん、私は固定値ではなく、バインドされたオブジェクトの内容を望んでいません。 ここで何がうまくいかないのですか?

ありがとうございます!

+0

問題を再現するのに十分なコードを入力してください。 –

+1

質問には表示されていませんが、必ずUserControlのDataContextを自分自身に設定してください(例:そのコンストラクタで 'DataContext = this'によって)。それを削除し、Edの答えに示すように、RelativeSourceでUserControlのXAMLにバインディングを記述します。 – Clemens

+0

はい、UserControlのDataContextはこのようです:DataContext = "{バインディングRelativeSource = {RelativeSource Mode = Self}}" – emvoll

答えて

0

誰かが問題を再現するのに十分なコードを共有していませんでしたが、行間を読むと、LabelUserControl XAMLにあると推測しています。 TestValueがあなたのUserControlのプロパティがある場合、これはおそらく動作します:

<Label Content="{Binding TestValue, RelativeSource={RelativeSource AncestorType=UserControl}}" /> 

しかし、一つの理由は、あなたが行っているかもしれない(それはリテラル文字列と半の仕事は、持っていた)あなたはUserControlが自身の作った場合でありますDataContext。その場合、の場合、問題はあなたのUserControlが独自のDataContextになっていることです。あなたがそれを実行した場合、がUserControlのコンテキストで評価されていますが、Settings.Setting123というプロパティはありません。

どうコントロールのDataContext手段は、あなたがコントロールのプロパティまたはそのXAML内側の1にBindingを持っている場合Bindingは、あなたがにバインドプロパティを探しに行くところ、それはだということです。あなたは、間違った場所を見るよう明示しています。

UserControlを独自のDataContextにすると、何もバインドできません。そういうわけではありません。それは、何もしないで壁から切り離すマシンのようなものです。代わりに、UserControl XAML内で上記のように{RelativeSource AncestorType=UserControl}バインディングを使用してください。

私は推測する必要はありません。あなたは、最小限の検証可能な例を作成したと主張していますが、それを共有することはありません。共有すれば、自信を持って問題を解決することができます。

+0

うん、それはかなり仕事をした。助けてくれてありがとう! – emvoll

関連する問題