2015-06-09 7 views
10

बदलता है मेरे पास एक दृश्य है जो एक भाग प्रदर्शित करता है। सभी भागों में पहचानकर्ताओं की एक सूची होती है। मेरे दृश्य में मैं भाग गुण और डेटाग्रिड को उस भाग के सभी पहचानकर्ताओं के साथ प्रदर्शित करता हूं।डेटाग्रिड सेल अपडेट करें यदि अन्य सेल

अब यदि मैं पहचानकर्ता का मान बदलता हूं, तो मैं डिफ़ॉल्ट रूप से एक और मूल्य अपडेट चाहता हूं। लेकिन अगर मैं अपना पहचानकर्ता मान बदलता हूं और दूसरी संपत्ति का डिफ़ॉल्ट सेट करता हूं - मेरा डेटाग्रिड अपडेट नहीं होता है। केवल अगर मैं सेल पर क्लिक करता हूं, तो यह फोकस खोने के बाद अपडेट हो जाता है।

मैं स्वचालित रूप से दृश्य को कैसे अपडेट कर सकता हूं?

मुझे लगता है कि समस्या यह है कि मैं भाग की सीधी संपत्ति अपडेट नहीं करना चाहता, लेकिन एक सूची में एक संपत्ति जो भाग की संपत्ति है।

देखें

<DataGrid> 
    <DataGridTemplateColumn Header="Company"> 
     <DataGridTemplateColumn.CellEditingTemplate> 
      <DataTemplate> 
        <ComboBox x:Name="CompanyEditComboBox" 
          ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Companies}" 
          SelectedItem="{Binding Company, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
          SelectionChanged = "CompanyEditComboBox_SelectionChanged" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellEditingTemplate> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Company}" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 


    <DataGridTemplateColumn Header="CompanyType"> 
     <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <ComboBox x:Name="CompanyTypeEditComboBox" 
             ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.CompanyTypes}" 
             SelectedItem="{Binding IdentificationCompanyType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
       <TextBlock Text="{Binding IdentificationCompanyType, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
</DataGrid> 

कोड देखें-पीछे

private void CompanyEditComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var vm = (PartViewModel)DataContext; 
    var box = (ComboBox) sender; 
    var c = (Company) box.SelectedItem; 
    vm.SetDefaultCompanyType(c); 
} 

ViewModel

public void SetDefaultCompanyType(Company c) 
{ 
    SelectedIdentification.IdentificationCompanyType = c.DefaultCompanyType; 
    OnPropertyChanged("IdentificationCompanyType"); 
} 
+1

मैं यहां आपके प्रश्न को समझने की कोशिश कर रहा हूं, इसलिए जब आप एक अलग 'कंपनी' चुनते हैं तो उसे अपने 'डेटाग्रिड' की चयनित पंक्ति में डिफ़ॉल्ट 'कंपनी टाइप' का चयन करना चाहिए? – XAMlMAX

+0

हां, बिल्कुल ... –

+0

बढ़िया, अब अगर 'कंपनी टाइप' डिफ़ॉल्ट रूप से नहीं बदला गया है तो इसे डिफ़ॉल्ट के रूप में सहेजा जाएगा। यदि आप केवल combobox के वास्तविक पाठ पर भरोसा करते हैं तो यह एक आसान फिक्स है, लेकिन यदि आपको पूरी ऑब्जेक्ट की आवश्यकता है तो आपको उस कॉम्बोबॉक्स के अंतर्निहित 'चयनित इटैम' को सेट करने की आवश्यकता है अन्यथा जब आप इसे सहेजना चाहते हैं तो उसे 'बाध्यकारी' मान का उपयोग करना होगा । यदि इसका कोई औचित्य हो? – XAMlMAX

उत्तर

5

यह हल। मैं Identification कक्षा में IdentificationCompanyType की सेटर में एक

OnPropertyChanged("IdentificationCompanyType"); 

जोड़ने के लिए किया था। उसके बाद यह डेटाग्रिड में स्वचालित रूप से अपडेट हो गया।

+6

यदि आपकी समस्या हल हो जाती है, तो आपको इसे उत्तर के रूप में चिह्नित करना चाहिए। –

संबंधित मुद्दे