我有一个自定义用户控件,它具有字符串类型的自定义依赖属性。它应该双向绑定到文本框,该文本框位于周围的应用程序中,如下所示:
<Textbox Name="TextBoxInHostApp"/>
<ctrl:MyControl
....
MyString = "{Binding ElementName=TextBoxInHostApp, Path=Text, Mode=TwoWay}"
</ctrl:MyControl>
问题:
控件还应该具有显示依赖属性值的功能!
在 MyControl 中,我有一个简单的字符串属性“名称”,它应该更新 MyString 依赖属性值。
因此,通常,如果 MyString 未绑定到外部世界,您将在使用控件的 xaml 中进行编码:
<Textbox Name="TextBoxInHostApp"/>
<ctrl:MyControl
....
MyString = "{Binding Name}"
</ctrl:MyControl>
但这在我的情况下不可用。
尝试 1:我在用户控件 xaml 中使用了触发器:
<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); // ??
}
}
我必须通过一个 DependencyObject 来调用一个 SetValue,这对 MVVM 来说是不愉快的。这种情况必须有更好的解决方案吗?