将 ComboBox SelectedValue 绑定到字符串会禁用默认的 SelectedValue wpf
Binding ComboBox SelectedValue to string disables the default SelectedValue wpf
我正在尝试将 ComboBox SelectedValue
绑定到 string
。 Binding
完美运行。但是,我的 ComboBoxItem's IsSelected
之一设置为 True
,但由于某种原因,当我启动应用程序时,none 项被 selected, SelectedValue
是空白的,我需要重新select我想要的项目。
这是我的代码:
XAML:
<ComboBox x:Name="SearchOptions"
FontFamily="Times New Roman"
Foreground="DarkRed"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
Grid.Column="2" Margin="10,0,0,0" Height="20"
SelectedValue="{Binding SearchType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ComboBoxItem x:Name="Contact" Content="A" FontFamily="Times New Roman" Foreground="DarkRed" HorizontalContentAlignment="Center" IsSelected="True"/>
<ComboBoxItem x:Name="Paper" Content="B" FontFamily="Times New Roman" Foreground="DarkRed" HorizontalContentAlignment="Center"/>
</ComboBox>
ViewModel 代码隐藏:
private string m_serachType;
public string SearchType
{
get { return m_serachType; }
set
{
m_serachType = value;
OnPropertyChanged("SearchType");
}
}
我的 ViewModel
class 实施 INotifyPropertyChanged
.
有什么想法吗?
尝试使用 string
代替 ComboboxItem
:
主窗口(XAML)
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Grid>
<ComboBox SelectedItem="{Binding SearchType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<sys:String>A</sys:String>
<sys:String>B</sys:String>
</ComboBox>
</Grid>
</Window>
主窗口 (cs)
public MainWindow()
{
InitializeComponent();
this.DataContext = new MyViewModel() { SearchType = "A" };
}
MyViewModel
class MyViewModel : INotifyPropertyChanged
{
private string m_serachType;
public string SearchType
{
get { return m_serachType; }
set
{
m_serachType = value;
OnPropertyChanged("SearchType");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
您可以使用 SelectedIndex
强制控件预先 select 一个值。
<ComboBox SelectedIndex="1" ... />
如果您删除 SelectedValue 属性,您的代码将起作用。
然后在你需要的地方你可以做这样的事情:
var item = (ComboBoxItem)SearchOptions.SelectedItem;
string text = item.Content;
我正在尝试将 ComboBox SelectedValue
绑定到 string
。 Binding
完美运行。但是,我的 ComboBoxItem's IsSelected
之一设置为 True
,但由于某种原因,当我启动应用程序时,none 项被 selected, SelectedValue
是空白的,我需要重新select我想要的项目。
这是我的代码:
XAML:
<ComboBox x:Name="SearchOptions"
FontFamily="Times New Roman"
Foreground="DarkRed"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
Grid.Column="2" Margin="10,0,0,0" Height="20"
SelectedValue="{Binding SearchType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ComboBoxItem x:Name="Contact" Content="A" FontFamily="Times New Roman" Foreground="DarkRed" HorizontalContentAlignment="Center" IsSelected="True"/>
<ComboBoxItem x:Name="Paper" Content="B" FontFamily="Times New Roman" Foreground="DarkRed" HorizontalContentAlignment="Center"/>
</ComboBox>
ViewModel 代码隐藏:
private string m_serachType;
public string SearchType
{
get { return m_serachType; }
set
{
m_serachType = value;
OnPropertyChanged("SearchType");
}
}
我的 ViewModel
class 实施 INotifyPropertyChanged
.
有什么想法吗?
尝试使用 string
代替 ComboboxItem
:
主窗口(XAML)
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Grid>
<ComboBox SelectedItem="{Binding SearchType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<sys:String>A</sys:String>
<sys:String>B</sys:String>
</ComboBox>
</Grid>
</Window>
主窗口 (cs)
public MainWindow()
{
InitializeComponent();
this.DataContext = new MyViewModel() { SearchType = "A" };
}
MyViewModel
class MyViewModel : INotifyPropertyChanged
{
private string m_serachType;
public string SearchType
{
get { return m_serachType; }
set
{
m_serachType = value;
OnPropertyChanged("SearchType");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
您可以使用 SelectedIndex
强制控件预先 select 一个值。
<ComboBox SelectedIndex="1" ... />
如果您删除 SelectedValue 属性,您的代码将起作用。 然后在你需要的地方你可以做这样的事情:
var item = (ComboBoxItem)SearchOptions.SelectedItem;
string text = item.Content;