2010-12-02 78 views

回答

14

您可以使用ValueConverter將布爾值轉換爲ComboBox索引並返回。像這樣:

public class BoolToIndexConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return ((bool)value == true) ? 0 : 1; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return ((int)value == 0) ? true : false; 
     } 
    } 
} 

假設是在索引0和否在索引1.然後,你必須使用該轉換器綁定到SelectedIndex屬性。對於這一點,你宣佈你的轉換器在你的資源部分:

<Window.Resources> 
    <local:BoolToIndexConverter x:Key="boolToIndexConverter" /> 
    </Window.Resources> 

然後你用它在你的綁定:

<ComboBox SelectedIndex="{Binding YourBooleanProperty, Converter={StaticResource boolToIndexConverter}}"/> 
+0

啊這很酷感謝隊友我是一個新的wpf – user434547 2010-12-02 13:27:54

+0

如果它適合你,你可以標記爲答案。 :) – Botz3000 2010-12-02 13:54:26

11

首先解決方案是一個複選框,因爲更換你的「是/否」組合框,好吧,複選框存在的原因。

第二種解決方案是使用true和false對象填充組合框,然後將ComboBox的「SelectedItem」綁定到布爾屬性。

4

我發現自己在過去使用ComboBox項目的IsSelected屬性。這個方法完全在xaml中。

<ComboBox> 
    <ComboBoxItem Content="No" /> 
    <ComboBoxItem Content="Yes" IsSelected="{Binding YourBooleanProperty, Mode=OneWayToSource}" /> 
</ComboBox> 
1

下面是一個例子(替換啓用/是/否禁用):

<ComboBox SelectedValue="{Binding IsEnabled}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Converter={x:Static converters:EnabledDisabledToBooleanConverter.Instance}}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
    <ComboBox.Items> 
     <system:Boolean>True</system:Boolean> 
     <system:Boolean>False</system:Boolean> 
    </ComboBox.Items> 
</ComboBox> 

這裏是轉換器:

public class EnabledDisabledToBooleanConverter : IValueConverter 
{ 
    private const string EnabledText = "Enabled"; 
    private const string DisabledText = "Disabled"; 
    public static readonly EnabledDisabledToBooleanConverter Instance = new EnabledDisabledToBooleanConverter(); 

    private EnabledDisabledToBooleanConverter() 
    { 
    } 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return Equals(true, value) 
      ? EnabledText 
      : DisabledText; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     //Actually won't be used, but in case you need that 
     return Equals(value, EnabledText); 
    } 
} 

而且不需要用指數來打。