2014-05-09 9 views
5

यदि मैं एक डब्ल्यूपीएफ कॉम्बो बॉक्स डेटाबेस कर रहा हूं, तो बाध्यकारी केस असंवेदनशील बनाने का कोई तरीका है?डब्ल्यूपीएफ कॉम्बोबॉक्स - केस असंवेदनशील डेटा-बाध्यकारी

उदाहरण के लिए यदि कॉम्बो बॉक्स किसी संपत्ति से जुड़ा हुआ है जिसका मूल्य हैलो है, तो इसे हैलो के मूल्य के साथ कॉम्बो बॉक्स आइटम का चयन करने के लिए प्राप्त करें?

+0

आपको किस स्थिति में इसकी आवश्यकता होगी? –

+0

कॉम्बो बॉक्स संग्रह के लिए बाध्य है i.e मास्टर डेटा टेबल और कुछ पुराने मान जो किसी अन्य मामले में दूसरे टेबल में संग्रहीत हैं, जहां हम किसी संपत्ति से बंधे हैं जिसका मूल्य हैलो है। – Sandy

+2

मैं 100% असंभव नहीं कह सकता, लेकिन नहीं, प्रतिबिंब केस संवेदनशील है (सी # में बाकी सब कुछ की तरह) तो यह काम नहीं करेगा। – BradleyDotNET

उत्तर

0

अपने व्यू-मॉडल पर एक नई संपत्ति बनाएं जो आपके द्वारा इच्छित फॉर्म में स्ट्रिंग में परिवर्तित संपत्ति-मूल्य प्रदान करती है। उस कॉम्बोबॉक्स (या अन्य WPF विजेट) को उस संपत्ति में बांधें।

उदाहरण के लिए:

public string NameOfValue 
{ 
    get 
    { 
     return this.OtherProperty.ToCapitalizedString(); 
    } 
} 

इस तरह से है कि आप कैसा है कि संपत्ति-मूल्य यह प्रदर्शित करने के लिए स्वरूपित हो जाता है पर नियंत्रण है में। हालांकि, अब आपको उस अन्य संपत्ति में परिवर्तन-अधिसूचना जोड़नी है, ताकि जब आप अन्य प्रॉपर्टी के मान को बदलते हैं, तो डेटा-बाध्यकारी नई संपत्ति के प्रदर्शन को अपडेट करने के लिए जानता है।

public string OtherProperty 
{ 
    get { .. } 
    set 
    { 
     Notify(); 
     Notify("NameOfValue"); 
    } 
} 
0

मैंने इसे IMultiValueConverter को कार्यान्वित करके पूरा किया।

कनवर्टर को कॉम्बोबॉक्स पर बाध्यकारी आइटमसोर्स पर लागू किया गया है और दो बाइंडिंग सेट करता है। मूल्य के लिए पहला जो चुना जाना है। दूसरा कॉम्बोबॉक्स की आइटम्ससोर्स प्रॉपर्टी से जुड़ा हुआ है जो संभावित मानों की एक सूची है।

<ComboBox ItemsSource="{Binding Path=DataContext.EntityTypeOptions, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"> 
    <ComboBox.SelectedValue> 
     <MultiBinding Converter="{StaticResource SelectedValueIgnoreCaseConverter}"> 
      <Binding Path="UpdatedValue" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged" /> 
      <Binding Path="ItemsSource" Mode="OneWay" RelativeSource="{RelativeSource Mode=Self}" /> 
     </MultiBinding> 
    </ComboBox.SelectedValue> 
</ComboBox> 

कनवर्टर के लिए, Convert() विधि ItemsSource अनदेखी मामले में चयनित मान पाता है और उसके बाद ItemsSource से मेल खाता हुआ मान देता है।

कनवर्टबैक() विधि केवल चयनित मान को ऑब्जेक्ट सरणी के पहले तत्व में वापस रखती है।

Imports System.Globalization 
Imports System.Windows.Data 
Imports System.Collections.ObjectModel 

Public Class SelectedValueIgnoreCaseConverter 
    Implements IMultiValueConverter 

    Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert 
     Dim selectedValue As String = TryCast(values(0), String) 
     Dim options As ObservableCollection(Of String) = TryCast(values(1), ObservableCollection(Of String)) 

     If selectedValue Is Nothing Or options Is Nothing Then 
      Return Nothing 
     End If 

     options.Contains(selectedValue, StringComparer.OrdinalIgnoreCase) 
     Dim returnValue As String = Utilities.Conversions.ParseNullToString((From o In options Where String.Equals(selectedValue, o, StringComparison.OrdinalIgnoreCase)).FirstOrDefault) 

     Return returnValue 
    End Function 

    Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack 
     Dim result(2) As Object 
     result(0) = value 
     Return result 
    End Function 
End Class 
संबंधित मुद्दे