View WPF中的多个ViewModel

时间:2016-10-06 12:57:01

标签: c# wpf xaml mvvm binding

如何将第一个/第二个/第三个Viewmodel的属性绑定到单个视图中的网格列。

如何在视图中将相应视图模型中的每个属性显式引用到网格列。

DataContext="{DynamicResource VMContainer}">
<Window.Resources>
    <vm:VMContainer x:Key="VMContainer"/>
</Window.Resources>

public class VMContainer
{
    public FirstViewModel   VM1 { get; set; }
    public SecondViewModel  VM2 { get; set; }
    public ThirdViewModel  VM3 { get; set; }
}

如果是单个视图模型,可以执行以下操作。

ItemsSource="{Binding Source={StaticResource VMContainer}}

GridColumn Header="Salary" Binding="{Binding Salary, Mode=TwoWay}"

尝试如下:

<ListView ItemsSource="{Binding Source={StaticResource VMContainer}}">
   <ListView.View>
     <GridView x:Name="grdTest">
               <GridViewColumn Header="Salary" DisplayMemberBinding="{Binding VM1.Salary / VMContainer.M1.Salry, Mode=TwoWay}" Width="100" />           
     </GridView>
</ListView.View>

InitializeComponent();
VMContainer VMC = new VMContainer();
DataContext = VMC;

如何在视图中将相应视图模型中的每个属性显式引用到网格列。 查看由其他视图模型组成的模型(wpf_mvvm中的Composite ViewModel)

问题是,总是VMC返回null,我很感激任何建议..!

1 个答案:

答案 0 :(得分:0)

如果你有这样的事情:

public class FirstViewModel
{
    public double Salary {get; set;}
}

然后这会起作用:

<TextBox Text="{Binding VM1.Salary}" />

但是,当您使用ItemsControl(如DataGrid或GridView)时,GridColumns中定义的绑定必须引用ItemsSouce中定义的项。例如:

public class Employee
{
    public double Salary {get; set;}
}

public class FirstViewModel
{
    public FirstViewModel()
    {
          Employees = new List<Employee>
          {
              new Employee() { Salary=10000 }
              new Employee() { Salary=15000 }
          }
    }
    public List<Employee> Employees {get;}
}
<DataGrid ItemsSource="{VM1.Employees}">
   <DataGrid.Columns>
       <DataGridTextColumn Binding="{Binding Salary}" />