2011-02-23 21 views
7

पर मैं कहाँ की तरहDataTrigger एक विशिष्ट प्रकार

void SomeFunction(int value) 

इस मैं दो DataGrid रों उपयोग कर रहा हूँ के लिए कार्य निर्दिष्ट करने की आवश्यकता मैं एक परिदृश्य है।

  • छोड़ दिया DataGrid कार्य
  • सही DataGrid चयनित समारोह

मैं केवल पैरामीटर जब एक वैध समारोह समारोह DataGrid में चुना जाता है DataGrid सक्षम होने के लिए चाहते हैं के लिए पैरामीटर धारण रखती है । NewItemPlaceHolder(CanUserAddRows="True" के लिए अंतिम पंक्ति जब चयनित है या चयन खाली है तो मैं इसे अक्षम करना चाहता हूं। मैं एक DataTrigger साथ experimentet लेकिन मैं यह काम करने के लिए

<Style TargetType="DataGrid"> 
    <Setter Property="IsEnabled" Value="False"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding ElementName=functionDataGrid, 
             Path=SelectedItem}" 
        Value="{x:Type systemData:DataRowView}"> 
      <Setter Property="IsEnabled" Value="True"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

यह अगर बाध्यकारी द्वारा उत्पादित मूल्य एक विशिष्ट Type की है की जाँच करना संभव है नहीं मिल सकता है? अन्यथा, क्या किसी के पास इसका कोई अन्य समाधान है? अब के रूप में, मैं SelectedCellsChanged घटना के साथ इस से निपटने रहा हूँ, लेकिन मैं पीछे

धन्यवाद

+0

अपने नए आइटम प्लेसहोल्डर क्या है? आपने इसे कैसे लागू किया है? –

+0

@ डैन पुज़ी: यह "खाली" पंक्ति है जो अंतर्निहित संग्रह में आने से पहले है, 'डेटाग्रिड' –

उत्तर

7

यदि कोई अन्य समस्या एक ही समस्या में आता है, तो मैंने इसे हल करने के लिए यहां क्या किया है। मैंने TypeOfConverter बनाया है जो बाध्यकारी द्वारा उत्पादित मान के Type देता है।

<DataTrigger Binding="{Binding ElementName=functionsDataGrid, 
           Path=SelectedItem, 
           Converter={StaticResource TypeOfConverter}}" 
      Value="{x:Type data:DataRowView}"> 
    <Setter Property="IsEnabled" Value="True"/> 
</DataTrigger> 

TypeOfConverter

public class TypeOfConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (value == null) ? null : value.GetType(); 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

उत्तर के लिए धन्यवाद, जब मैं इसे आज़माता हूं तो मुझे XamlParseException कहता है कि मैं DataTrigger का मान निर्दिष्ट नहीं कर रहा हूं ... कोई संकेत है? –

+0

@SoMoS: मेरे उदाहरण में, डेटा को 'xmlns: data = "clr-namespace के रूप में परिभाषित किया गया है: System.Data; assembly = System.Data" '। क्या आपने इसे शामिल किया है? –

+0

मेरे पास एक अलग प्रकार था। वैसे भी मैंने कनवर्टर को प्रकार के पूर्ण नाम को वापस करने के लिए बदल दिया है और उस मूल्य का उपयोग किया है। धन्यवाद! –

3

आप सही डेटा ग्रिड (पैरामीटर) के लिए एक DataTemplate पर विचार किया है कोड का उपयोग नहीं करना पसंद करेंगे?

फिर आप बाएं डेटाग्रिड के चयनित इटैम में अपने दाएं डेटाग्रिड के डेटाकॉन्टेक्स्ट को बाध्य कर सकते हैं।

और आपके डेटा टेम्पलेट में, आप डेटाटैम्पलेट डेटाटाइप = {x: स्थानीय टाइप करें: FunctionObject} जब आप अपना सही पक्ष सक्षम डेटाग्रिड पैरामीटर एंट्री फॉर्म की तरह दिख सकते हैं। जब 'फ़ंक्शनऑब्जेक्ट' का चयन नहीं किया जाता है तो उसके लिए डेटा टेम्पलेट भी हो सकता है जो एक अक्षम डेटाग्रिड पैरामीटर एंट्री फॉर्म दिखाता है, या आप कुछ भी प्रदर्शित नहीं करना चुन सकते हैं।

+0

के लिए 'CanUserAddRows = "True" 'धन्यवाद, यह एक बहुत अच्छा विचार है! मैं इसे आज़माउंगा! –

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