2012-05-28 7 views
6

मेरे पास एक ही दृश्य में दो डेटाग्रिड्स हैं लेकिन संग्रह जो इन डेटाग्रिड्स के आइटमसोर्स हैं, अलग-अलग दृश्य मॉडल में हैं। तो क्या दो अलग-अलग दृश्य मॉडल में संग्रह के साथ इन दो डेटाग्रिड्स को बांधना संभव है?क्या किसी व्यू में दो व्यू मॉडल हैं जो डेटा संदर्भ के रूप में हैं?

उत्तर

8

जाने के लिए एक DataContext और बाइंड का उपयोग नहीं करते:

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

बंधन

की तरह किया जा सकता है
<DataGrid ItemsSource="{Binding A.Items}"> 
    <!-- Sample, not complete --> 
</DataGrid> 
+0

+1 मैं भी इस उदाहरण में एक समग्र ViewModel के लिए जाना होगा। –

0

आप कंटेनर व्यू के बजाय प्रत्येक डेटाग्रिड के लिए डेटा कॉन्टेक्स्ट सेट कर सकते हैं।

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

या संयोजन दोनों मॉडल एक दृश्य के मॉडल के लिए सीधे

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

नहीं, सीधे नहीं।

आप खुद को देखने का DataContext सेट कर सकते हैं, तो एक अलग संपत्ति के माध्यम से एक ViewModel का पर्दाफाश और उन गुणों के लिए बाध्य:: आप हालांकि विकल्प है

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

    public ViewModel1 FirstViewModel { get; set; } 

    public ViewModel2 SecondViewModel { get; set; } 

} 

या आप एक आवरण viewmodel कर सकता है जो या तो (से विरासत में मिली) ViewModels में से एक फैली हुई है, या उन दोनों को लपेटता है और उचित गुण सतहों:

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

    public ViewModel2 SecondViewModel { get; set; } 
} 
संबंधित मुद्दे