如何绑定多个用户控件?

时间:2014-12-18 13:34:09

标签: c# wpf mvvm

我创建了以下用户控件:

<UserControl x:Class="TextBinder" ...>
    <TextBox Text="{Binding ????}" />
</UserControl>

现在我在MainWindow中使用了两次用户控件。然后将MainWindow绑定到我的ViewModel(我设置了DataContext)。现在的问题是:如何将我的用户控件绑定到user_controlViewModel?

在我的ViewModel中,我创建了两个对象,我们称之为UC_1和UC_2,它们包含不同的文本,我想将它们绑定到我的MainWindow中各自的用户控件。

我应该把什么放在????

注意:请不要简化mu TextBox以在一个usercontrol中加倍文本框。这不是我想要的,因为在我的现实生活中,我有比文本框更多的东西,并且在一个视图中应该多次使用usercontrol。

谢谢!

2 个答案:

答案 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}/>