2011-03-24 18 views
11

बनाने के लिए मेरे पास ऑब्जेक्ट्स डेटाग्रिड से जुड़ी हैं। मैंने ऑब्जेक्ट की डिफ़ॉल्ट संपत्ति के लिए एक रेडियो बटन कॉलम बनाया है।डेटाग्रिड रेडियोबटन कॉलम

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

 <DataGrid CanUserAddRows="False" AutoGenerateColumns="False" Name="TEst" > 
     <DataGrid.Columns > 
      <DataGridTextColumn Header="Value" Binding="{Binding Path=Name, Mode=OneTime}"/> 

      <DataGridTemplateColumn Header="Is Default"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <RadioButton GroupName="Test" IsChecked="{Binding IsDefault}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

     </DataGrid.Columns> 
    </DataGrid> 

private class Test : INotifyPropertyChanged 
    { 
     public string Name 
     { 
      get; 
      set; 
     } 
     bool isDefult; 
     public bool IsDefault 
     { 
      get 
      { 
       return isDefult; 
      } 
      set 
      { 
       isDefult = value; 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
    } 

    public MainWindow() 
    { 
     this.InitializeComponent(); 
     Test[] ya = new Test[] { new Test { Name = "1", IsDefault = false }, new Test { Name = "2", IsDefault = false }, new Test { Name = "3", IsDefault = true } }; 

     this.TEst.ItemsSource = ya; 
    } 

मैं इस पर दोपहर अपने बालों को खींच रहा हूं। किसी भी मदद से प्यार किया जाएगा।

उत्तर

12

यह काफी अजीब है, लेकिन तुम सब करने की है कि RadioButton के बंधन को बदलने के लिए है:

<RadioButton GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" /> 

जहाँ तक मुझे पता है, डिफ़ॉल्ट मान LostFocus है, लेकिन ध्यान देने के साथ कुछ समस्याएं भी हैं डेटाग्रिड के अंदर। मुझे नहीं पता कि समस्या क्यों होती है।

और एक और मुद्दा: IsDefault संपत्ति के सेटटर के अंदर PropertyChanged ईवेंट बढ़ाएं। अब सब कुछ अधिसूचनाओं के बिना ठीक काम करता है, लेकिन यदि आप अधिक xaml कोड जोड़ते हैं तो यह पता लगाने के लिए भिन्न होगा कि यूआई अपडेट क्यों नहीं किया गया है।

+0

भी मुझे डेस्क पर अपने सिर को टक्कर देने के लिए धन्यवाद की आवश्यकता है। – StrayPointer

1

UpdateSourceTrigger=PropertyChanged सेट करना पर्याप्त नहीं है। आपको Mode=TwoWay

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