如何正确地将单个视图绑定到多个ViewModel?

时间:2014-07-23 13:54:24

标签: c# wpf silverlight mvvm

我有一个具有以下绑定的视图:

<TextBlock Text="{Binding Attribute1, Mode=TwoWay}" />
<TextBlock Text="{Binding Attribute2, Mode=TwoWay}" />

此外,我还有大量的视图模型,其中以某种方式调用依赖项属性(名称 OfficialName 等),但实质上它们是Attribute1,所以我想要使用相同的视图向用户显示它们。所有绑定都应该是双向的。我正在考虑创建一个临时类,如:

public class AttributesInfo
{
   string Attribute1{ get; set; }
   // other attributes
}

并在每个视图模型中公开属性Attributes

return new AttributesInfo{ Attribute1 = Name, ... };
return new AttributesInfo{ Attribute1 = OfficialName, ... };

将提供一个视图:

<TextBlock Text="{Binding AttributesInfo.Attribute1, Mode=TwoWay}" />

现在我正在考虑双向绑定,我明白这是一个错误的解决方案。有什么好的吗?

1 个答案:

答案 0 :(得分:2)

如果您创建具有所需属性属性的接口并在不同的VM中实现它,那将更好。

e.g。

public interface IAttribute
{
   string Attribute1 {get; set;}
   .
   .
   .
}

public class someVM : IAttribute
{
  private string _name;
  public string Nam
  {
     get {return _name;}
     set
     {
        _name = value;
        NotifyPropertyChanged("Name");
                 }
  }

  public string Attribute1
  {
     get{return this.Name;}
     set
     {
        this.Name = value; 
        NotifyPropertyChange("Attribute1");
     }
  }
}

通过这种方式,您的属性将与属性同步,您可以对所有VM使用相同的视图。