2012-04-11 15 views
11

मैं ListView या एक ConverterParameter के रूप में GridView पारित करने के लिए हालांकि, कनवर्टर दिनचर्या में पैरामीटर एक प्रकार स्ट्रिंगGridView एक ConverterParameter के रूप में पारित करने के लिए कैसे

नीचे के रूप में आ रहा है कोशिश कर रहा हूँ XAML सूची का हिस्सा है देखें और कनवर्टर वर्ग।

किसी भी मदद की बहुत सराहना की। धन्यवाद!!!

<ListView Name="SeqDtStDataListView1" Grid.Row="1" 
     DataContext="{Binding Path=DisplayDT[0], Converter ={StaticResource  
                 CNVToColumn},ConverterParameter=?????}" 
     VerticalContentAlignment="Stretch" VerticalAlignment="Stretch" 
                 HorizontalAlignment="Stretch" 
     SelectionChanged="SEQDatalistview_SelectionChanged" Margin="5"> 


     <ListView.View > 
      <GridView x:Name="SeqDtStDataGridView1"/> 
     </ListView.View> 
    </ListView> 

कनवर्टर:

namespace MFTest.Converters 
{ 
public class CNVToColumn : IValueConverter 
{ 

    public object Convert(object value, 
          Type targetType, 
          object parameter, 
          System.Globalization.CultureInfo culture) 
    { 
     DataTable dt = (DataTable)value; 
     GridView GV = (GridView)parameter;    <========= fail here =========== 
     if (dt != null && GV != null) 
      foreach (var colum in dt.Columns)    // Binding the Columns 
      { 
       DataColumn dc = (DataColumn)colum; 
       GridViewColumn column = new GridViewColumn(); 
       column.DisplayMemberBinding = new Binding(dc.ColumnName); 
       column.Header = dc.ColumnName; 
       GV.Columns.Add(column); 
      } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

} 
} 

उत्तर

-3

आप इस्तेमाल कर सकते हैं ConverterParameter={Binding ElementName=[insert x:Name of grid view]}

हालांकि IMHO मैं जरूरत पर पुनर्विचार चाहते हैं - क्या तुम सच में एक UIControl एक कनवर्टर पैरामीटर के रूप में पारित करने के लिए की जरूरत है?

+0

आंशिक वर्ग पर रन टाइम पर यह त्रुटि पॉपअप: 'बाइंडिंग' 'कनवर्टर पैरामीटर' प्रकार 'बाइंडिंग' की संपत्ति पर सेट नहीं की जा सकती है। एक 'बाध्यकारी' केवल निर्भरता ऑब्जेक्ट की निर्भरता प्रॉपर्टी पर सेट किया जा सकता है। –

+0

@IrmiMrm - लघु उत्तर .. आप यह नहीं कर सकते .. आसानी से। आप केवल निर्भरता ऑब्जेक्ट के व्युत्पन्न पर डीपी गुणों से जुड़ सकते हैं। बाध्यकारी योग्य नहीं है - आप किसी अन्य बाध्यकारी की ElementName प्रॉपर्टी के लिए बाध्यकारी निर्दिष्ट करने का प्रयास कर रहे हैं। बहुत दृढ़ लगता है .. समस्या का एक आसान समाधान मौजूद होना चाहिए। – Gishu

6

आप इससे जुड़ नहीं सकते हैं।

कन्वर्ट पैरामीटर ऑब्जेक्ट से विरासत में आता है और इसलिए बाध्यकारी नहीं है।

हालांकि, आप एक्सएएमएल भाग में इसे करने के बजाय कोड में अपने बाध्यकारी को परिभाषित कर सकते हैं।

System.Windows.Data.Binding b = new System.Windows.Data.Binding(); 
b.ConverterParameter = this; 

कृपया ConvertParameter here

+0

अच्छा लगता है, मैं कोशिश करूंगा, धन्यवाद! –

+0

@ लुइस फिलिप - लिंक किए गए पोस्ट के बारे में निश्चित नहीं है। IMHO ViewModels में कोई निर्भरता गुण नहीं होना चाहिए .. मैं दृश्य-अज्ञेय दृश्य मॉडल के बजाय डीपी को दृश्य/नियंत्रण के साथ अधिक जोड़ता हूं। – Gishu

+0

'कनवर्टर पैरामीटर' किसी भी चीज़ से प्राप्त नहीं होता है, यह एक संपत्ति है, समस्या यह है कि 'मार्कअप एक्सटेंशन' को 'निर्भरता ऑब्जेक्ट' से प्राप्त नहीं होता है। –

17

.NET 4 के बाद से आप x:Reference इस्तेमाल कर सकते हैं जो आपको एक ElementName बंधन है जो केवल, जबकि बहुत सुंदर को प्राप्त करने निर्भरता गुणों पर सेट किया जा सकता से बचने के लिए अनुमति देता है पर सीमाओं के बारे में पढ़ा वही चीज।

चक्रीय निर्भरता प्रतिबंधों के कारण आप पेड़ में अपने या उसके पूर्वजों के अंदर नियंत्रण का संदर्भ नहीं दे सकते। हालांकि आप बाध्यकारी स्तर को ले जा सकते हैं और केवल DataContext का उत्तराधिकारी बना सकते हैं, उदा।

<Border DataContext="{Binding Path=DisplayDT[0], 
           Converter={StaticResource CNVToColumn}, 
           ConverterParameter={x:Reference SeqDtStDataListView1}}"> 
    <ListView Name="SeqDtStDataListView1" Grid.Row="1"> 
+0

* आप अपने या उसके निर्णायक * के अंदर नियंत्रण का संदर्भ नहीं दे सकते। आपका मतलब है ** पूर्वजों **। आप पूर्वजों का संदर्भ नहीं दे सकते। – AgentFire

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

  • कोई संबंधित समस्या नहीं^_^