来自字符串的 WPF ComboBox 初始状态 属性
WPF ComboBox initial state from a string property
我有一个简单的组合:
<ComboBox x:Name="testCombo" SelectedValue="{Binding State, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" MinWidth="100">
<ComboBoxItem>OPEN</ComboBoxItem>
<ComboBoxItem>CLOSED</ComboBoxItem>
</ComboBox>
该状态只是一个实施了 INotifyPropertyChanged 的字符串 属性。
private string state;
public string State
{
get { return state; }
set
{
state = value;
OnPropertyChanged("State");
}
}
我想要实现的是,当状态字符串 属性 最初设置为 "OPEN" 时,当我的 window 加载时,组合框将其初始项设置为 "OPEN"。
我也尝试在那里附加一个转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
ComboBoxItem cbi = new ComboBoxItem();
cbi.Content = value as string;
return cbi;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value as ComboBoxItem).Content;
}
有了这个,我的状态字符串 属性 将被很好地填充,但 ComboBox 不会达到所需的初始状态。
ComboBoxItem
不是按内容比较,而是按引用进行比较,您在转换器中创建的实例与 ComboBox
中显示的实例不同,因此它们永远不会相等。您可以做的是将 ItemsSource
设置为字符串列表,然后将 SelectedItem
直接绑定到字符串 属性 而无需任何转换器
<ComboBox SelectedItem="{Binding State, Mode=TwoWay}" x:Name="testCombo">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type sys:String}">
<sys:String>OPEN</sys:String>
<sys:String>CLOSED</sys:String>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
您还需要将 sys
命名空间添加到您的 XAML
xmlns:sys="clr-namespace:System;assembly=mscorlib"
我有一个简单的组合:
<ComboBox x:Name="testCombo" SelectedValue="{Binding State, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" MinWidth="100">
<ComboBoxItem>OPEN</ComboBoxItem>
<ComboBoxItem>CLOSED</ComboBoxItem>
</ComboBox>
该状态只是一个实施了 INotifyPropertyChanged 的字符串 属性。
private string state;
public string State
{
get { return state; }
set
{
state = value;
OnPropertyChanged("State");
}
}
我想要实现的是,当状态字符串 属性 最初设置为 "OPEN" 时,当我的 window 加载时,组合框将其初始项设置为 "OPEN"。
我也尝试在那里附加一个转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
ComboBoxItem cbi = new ComboBoxItem();
cbi.Content = value as string;
return cbi;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value as ComboBoxItem).Content;
}
有了这个,我的状态字符串 属性 将被很好地填充,但 ComboBox 不会达到所需的初始状态。
ComboBoxItem
不是按内容比较,而是按引用进行比较,您在转换器中创建的实例与 ComboBox
中显示的实例不同,因此它们永远不会相等。您可以做的是将 ItemsSource
设置为字符串列表,然后将 SelectedItem
直接绑定到字符串 属性 而无需任何转换器
<ComboBox SelectedItem="{Binding State, Mode=TwoWay}" x:Name="testCombo">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type sys:String}">
<sys:String>OPEN</sys:String>
<sys:String>CLOSED</sys:String>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
您还需要将 sys
命名空间添加到您的 XAML
xmlns:sys="clr-namespace:System;assembly=mscorlib"