2012-12-19 34 views
5
में DataTemplate के लिए बाइंडिंग

मैं सफलतापूर्वक एक डेटा ग्रिड में एक स्तंभ एक नमूदार संग्रह करने के लिए वस्तुओं INotifyPropertyChanged इंटरफ़ेस को लागू करने के साथ बंधे हुए है वस्तुओं वर्ग:INotifyPropertyChanged GridColumn

public string Name 
    { 
     get { return _name; } 
     set 
     { 
      if (value == _name) return; 
      _name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

लेकिन एक और स्तंभ में मैं एक खाका उपयोग कर रहा हूँ:

<dxg:GridColumn.CellTemplate> 
    <DataTemplate> 
     <StackPanel> 
       <Rectangle Height="19" Width="19" Fill="{Binding Path=Data.StatusColor}"></Rectangle> 
     </StackPanel> 
    </DataTemplate> 
</dxg:GridColumn.CellTemplate> 

आयत के भरण संपत्ति एक "गणना" संपत्ति के लिए बाध्य है:

public SolidColorBrush StatusColor 
{ 
    get 
    { 
     if (StapelStatus == StapelStatus.Neu) 
     { 
      return new SolidColorBrush(Colors.CornflowerBlue); 
     } 
     return new SolidColorBrush(Colors.DarkOrange); 
    } 
} 

कुछ अन्य संपत्ति setters, बुला रहे हैं

OnPropertyChanged("StatusColor"); 

मैंने सोचा था कि जो StapelStatus का मूल्य बदल यह ग्रिड कॉलम में आयत रंग में रंग बदलने के लिए पर्याप्त होगा। लेकिन दुर्भाग्यवश जब StapelStatus बदल दिया गया है और OnPropertyChanged("StatusColor") कहा जाता है तो ग्रिड इस परिवर्तन को प्रतिबिंबित नहीं करता है। मुझे लगता है कि मुझे किसी भी तरह DataTemplate में बाध्यकारी बदलना है। क्या कोई मुझे सलाह दे सकता है?

+0

तुम क्यों StatusColor बंधन का मार्ग में 'Data.' की क्या ज़रूरत है:

स्तंभ के लिए काम XAML नीचे

? – Jay

+0

फ्रैंक होने के लिए, मुझे कोई संकेत नहीं है। मैंने इसे एक कामकाजी उदाहरण में पाया है। अगर मैं डेटा हटा देता हूं। मूल्य डेटा टेम्पलेट में बिल्कुल दिखाई नहीं देगा। –

+1

क्या आप सुनिश्चित हैं कि DataTemplate के लिए DataContext सही है? क्या समान श्रेणी का नाम और स्थिति रंग गुण है? – snurre

उत्तर

0

यह वास्तव में एक्सएएमएल में एक बाध्यकारी समस्या थी। दुर्भाग्यवश मैंने GridColumn में फ़ील्डनाम संपत्ति सेट नहीं की थी। मैंने सोचा कि फ़ील्डनाम केवल सामान्य ग्रिड कॉलम में उपयोग के लिए है जिसमें कोई टेम्पलेट नहीं है।

<dxg:GridColumn Header="" FieldName="StatusColor"> 
    <dxg:GridColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
       <Rectangle RadiusX="19" RadiusY="19" Height="19" Width="19" Stroke="Black" Fill="{Binding Path=Value}"></Rectangle> 
       </StackPanel> 
     </DataTemplate> 
    </dxg:GridColumn.CellTemplate> 
</dxg:GridColumn> 
1

क्या यह काम करेगा?

public Whatever StapelStatus 
{ 
    get { return _stapelStatus; } 
    set 
    { 
     _stapelStatus = value; 
     OnPropertyChanged("StapelStatus"); 
     StatusColor = value == StapelStatus.Neu ? new SolidColorBrush(Colors.CornflowerBlue) : new SolidColorBrush(Colors.DarkOrange); 
    } 
} 

public Brush StatusColor 
{ 
    get { return _statusColor; } 
    set 
    { 
     _statusColor = value; 
     OnPropertyChanged("StatusColor"); 
    } 
} 
+0

हाय स्नूर, आपके सुझाव के लिए धन्यवाद लेकिन मुझे बिल्कुल वही व्यवहार मिलता है। "ऑनप्रॉपर्टी चेंज (" स्टेटस कॉलर ")" के साथ स्टेटसकोलर का सेटर निष्पादित किया जाएगा लेकिन ग्रिड परिवर्तन को प्रतिबिंबित नहीं करता है। –