2016-10-06 3 views
0

Как связать свойство первого/второго/третьего Viewmodel с столбцом сетки в одном представлении.Несколько ViewModels в представлении WPF

Как я могу явно ссылаться на каждое свойство в соответствующей модели представления на столбе сетки в поле зрения ..!

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; 

Как я мог явно ссылаться на каждое свойство в соответствующей модели представления для столбца сетки с учетом ..! Просмотреть модель, состоящую из других моделей (Composite ViewModel in wpf_mvvm)

Проблема: всегда VMC возвращает null, я был бы признателен за любое предложение ..!

+1

путаюсь. В чем разница между ViewModelCombine и VMContainer. Что такое ViewModelCombine? – Liero

+0

И что означает «..Не работает»? Любые ошибки в окне вывода? –

+0

Спасибо Henk Holterman ... Не работает означает..Не связывание данных ...! – Rajesh

ответ

0

Если UserControl имеют DataContext ваших MyClass и контейнер является государственной собственностью ниже:

public MyClass 
{ 
public VMContainer Container {get; set;} 
} 

Ваше связывание должно выглядеть так:

Binding="{Binding Container.VM1.Salary, Mode=TwoWay}" 
+0

Спасибо за ваш отзыв ..! Но мой код выглядит следующим образом: public MainWindow() {InitializeComponent(); VMContainer VM = новый VMContainer(); this.DataContext = VM; } – Rajesh

+0

Не работает, как вы упомянули выше, Сергей Ваулин ...! – Rajesh

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}" />