文字列型のカスタム依存関係プロパティを持つカスタムユーザーコントロールがあります。次のように、周囲のアプリにあるテキストボックスに双方向でバインドする必要があります。
<Textbox Name="TextBoxInHostApp"/>
<ctrl:MyControl
....
MyString = "{Binding ElementName=TextBoxInHostApp, Path=Text, Mode=TwoWay}"
</ctrl:MyControl>
問題:
コントロールには、依存関係プロパティの値も表示する機能が必要です。
MyControlには、単純な文字列プロパティ「Name」があります。これにより、MyStringの依存プロパティ値が更新されます。
したがって、通常、MyStringが外部にバインドされていない場合は、コントロールが使用されるxamlでコーディングします。
<Textbox Name="TextBoxInHostApp"/>
<ctrl:MyControl
....
MyString = "{Binding Name}"
</ctrl:MyControl>
しかし、私の場合、それは利用できません。
試行1:usercontrolxaml内でトリガーを使用しました。
<UserControl.Style>
<Style>
<Style.Setters>
<Setter Property="local:MyControl.MyString" Value="{Binding Name, UpdateSourceTrigger=PropertyChanged}"/>
</Style.Setters>
</Style>
dpの「ローカル値」がすでにここで設定されているため、このトリガーは機能しません。
MyString = "{Binding ...
コメントアウトした場合:
<!--<MyString = "{Binding ...
...「ローカル値」が設定されていないため、トリガーは正常に機能します。
次の試み:MyControlsビューモデルでハードな方法とコードを試してみます:
public string Name
{
get
{
return _name;
}
set
{
_name = value;
RaisePropertyChanged("Name");
MyOwningUICtrl.SetValue(MyControl.MyStringProperty, value); // ??
}
}
SetValueを呼び出すためにDependencyObjectを渡す必要がありますが、これはMVVMにとって不快です。このシナリオにはもっと良い解決策があるはずですか?