我创建了以下用户控件:
<UserControl x:Class="TextBinder" ...>
<TextBox Text="{Binding ????}" />
</UserControl>
现在我在MainWindow中使用了两次用户控件。然后将MainWindow绑定到我的ViewModel(我设置了DataContext)。现在的问题是:如何将我的用户控件绑定到user_controlViewModel?
在我的ViewModel中,我创建了两个对象,我们称之为UC_1和UC_2,它们包含不同的文本,我想将它们绑定到我的MainWindow中各自的用户控件。
我应该把什么放在????
注意:请不要简化mu TextBox以在一个usercontrol中加倍文本框。这不是我想要的,因为在我的现实生活中,我有比文本框更多的东西,并且在一个视图中应该多次使用usercontrol。
谢谢!
答案 0 :(得分:2)
我给了你一个通用答案:
在“real(一个用户控件,你想要使用具有不同属性名称的不同视图模型)”“usercontrol你绑定到你自己的DependencyProperties ,你用 ElementName或RelativeSource绑定< / strong>你应该永远不要在UserControl中设置DataContext 。
<UserControl x:Name="myRealUC" x:class="MyUserControl">
<TextBox Text="{Binding ElementName=myRealUC, Path=MyOwnDPIDeclaredInMyUc, Path=TwoWay}"/>
<UserControl>
如果您这样做,您可以在任何视图中轻松使用此Usercontrol,如:
<myControls:MyUserControl MyOwnDPIDeclaredInMyUc="{Binding MyPropertyInMyViewmodel}"/>
和完整性:依赖属性
public readonly static DependencyProperty MyOwnDPIDeclaredInMyUcProperty = DependencyProperty.Register(
"MyOwnDPIDeclaredInMyUc", typeof(string), typeof(MyUserControl), new PropertyMetadata(""));
public bool MyOwnDPIDeclaredInMyUc
{
get { return (string)GetValue(MyOwnDPIDeclaredInMyUcProperty); }
set { SetValue(MyOwnDPIDeclaredInMyUcProperty, value); }
}
答案 1 :(得分:0)
多数说,你需要在UserControl中声明一个依赖属性:
public partial class TextBinder:UserControl
{
public static readonly DependencyProperty textproperty =
DependencyProperty.Register("Text", typeof(string), typeof(TextBinder));
public string Text
{
get
{
return this.GetValue(textproperty) as string;
}
set
{
this.SetValue(textproperty,value);
}
}
}
然后,您可以通过以下方式在窗口中使用usercontrol:
<YourNamespace:TextBinder Text={Binding ViewModelProperty}/>