2014-05-09 26 views
5

WPF birleşik giriş kutusu veriyorsam, bağlama durumunu duyarsız hale getirmenin bir yolu var mı?WPF ComboBox - büyük/küçük harf duyarlı veri bağlama

Örneğin, birleşik kutu, değeri HELLO olan bir özelliğe bağlıysa, açılan kutu öğesini Hello değeriyle seçtiniz mi?

+0

Hangi durumda buna ihtiyacınız olacak? –

+0

Birleşik Kutu toplama, yani ana veri tabloları ve başka bir durumda bulunan ve değeri HELLO olan bir özelliğe bağlı olduğumuz başka bir tabloda saklanan bazı eski değerler bağlanır. – Sandy

+2

İmkansızın% 100'ü diyemem, ama yansıma büyük/küçük harfe duyarlıdır (C# deki her şey gibi) bu yüzden işe yaramaz. – BradleyDotNET

cevap

0

Görünüm modelinizde, istediğiniz biçimdeki bir dizeye dönüştürülen özellik değerini sağlayan yeni bir özellik oluşturun. ComboBox'ınızı (veya diğer WPF widget'lerini) bu özelliğe bağlayın. Örneğin

: Eğer bu özellik değeri görüntülemek için biçimlendirilmiş alır tam olarak nasıl üzerinde kontrol sahibi Bu şekilde

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

. Bununla birlikte, şimdi diğer mülke bir değişiklik bildirimi eklemeniz gerekir; böylece, DiğerProperty değerini değiştirdiğinizde, veri bağlama yeni mülkün görünümünü güncellemeyi bilir.

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

Bunu IMultiValueConverter kullanarak gerçekleştirdim.

Dönüştürücü, ComboBox'ta bulunan ItemsSource bağlayıcısına uygulanır ve iki bağlama oluşturur. Seçilecek olan değer için ilk. İkincisi, olası değerlerin bir listesi olan ComboBox'un ItemsSource özelliğine bağlanır. dönüştürücü için

<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> 

, dönüştürme() metodu ItemsSource göz ardı durumda seçilen değeri bulur ve sonra ItemsSource bir uygun değer geri gönderir.

ConvertBack() yöntemi, seçilen değeri yalnızca nesne dizisinin ilk öğesine yerleştirir.

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 
İlgili konular