2012-05-28 15 views

risposta

8

andare per un modello di vista che unisce entrambe le cose:

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; } 
} 

legame può essere fatto come

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

+1 mi sarebbe anche fare una ViewModel composito in questo caso. –

0

È possibile impostare DataContext per ogni DataGrid anziché per la vista Contenitore.

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

O non utilizzare un DataContext e Bind ai modelli direttamente

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

No, non direttamente. Avete opzioni se:

è possibile impostare il DataContext della vista a se stesso, poi esporre ogni ViewModel attraverso una proprietà separata e si legano a quelle proprietà:

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

    public ViewModel1 FirstViewModel { get; set; } 

    public ViewModel2 SecondViewModel { get; set; } 

} 

Oppure si potrebbe fare un ViewModel involucro che o si estende (eredita da) una delle ViewModels, o entrambi avvolge e superfici le proprietà appropriate:

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

    public ViewModel2 SecondViewModel { get; set; } 
} 
Problemi correlati