2012-05-28 16 views

Odpowiedz

8

pójść na modelu widoku łącząc oba:

public class ViewModelA { 
    public ObservableCollection<CustomClass> Items { get; set; } 
    /* properties, etc. */ 
} 

public class ViewModelB { 
    /* properties, etc. */ 
} 

public class CombiningViewModel { 
    public ViewModelA A { get; set; } 
    public ViewModelB B { get; set; } 
} 

Wiązanie można zrobić jak

<DataGrid ItemsSource="{Binding A.Items}"> 
    <!-- Sample, not complete --> 
</DataGrid> 
+0

+1 W tym przypadku wybrałbym również kompozytowy ViewModel. –

0

Można ustawić DataContext dla każdej DataGrid, a nie dla widoku kontenera.

<Grid> 
    <DataGrid ... DataContext="..." /> 
    <DataGrid ... DataContext="..." /> 
</Grid> 

Albo nie używać DataContext i wiążą się z modeli bezpośrednio

<DataGrid ItemsSource="{Binding Source={StaticResource ...}}" /> 
1

Nie, nie bezpośrednio. Masz opcje choć:

Można ustawić DataContext z myślą o sobie, a następnie wystawiać każdy ViewModel przez oddzielny nieruchomości i wiążą się z tymi właściwościami:

public class MyView : Window 
{ 
    public MyView() 
    { 
     this.DataContext = this; 
    } 

    public ViewModel1 FirstViewModel { get; set; } 

    public ViewModel2 SecondViewModel { get; set; } 

} 

Albo można zrobić ViewModel owijkę, która albo rozciąga się (dziedziczy) z jednej z modeli widoków, albo owija je i powierzchnie odpowiednich właściwości:

public class MyCompositeViewModel 
{ 
    public ViewModel1 FirstViewModel { get; set; } 

    public ViewModel2 SecondViewModel { get; set; } 
} 
Powiązane problemy