如何将第一个/第二个/第三个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,我很感激任何建议..!
答案 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}" />