C# 如何在ModelView中设置ComboBox选定项?
我有静态组合框项目。我的XAML如下所示:C# 如何在ModelView中设置ComboBox选定项?,c#,wpf,combobox,mvvm-light,C#,Wpf,Combobox,Mvvm Light,我有静态组合框项目。我的XAML如下所示: <ComboBox x:Name="comboBox" SelectedItem="{Binding MySelectedItem}" HorizontalAlignment="Left" Margin="58,7,0,0" VerticalAlignment="Top" Width="120"> <ComboBoxItem Name="cbi1">Item 1</ComboBoxItem>
<ComboBox x:Name="comboBox" SelectedItem="{Binding MySelectedItem}" HorizontalAlignment="Left" Margin="58,7,0,0" VerticalAlignment="Top" Width="120">
<ComboBoxItem Name="cbi1">Item 1</ComboBoxItem>
<ComboBoxItem Name="cbi2">Item 2</ComboBoxItem>
<ComboBoxItem Name="cbi3">Item 3</ComboBoxItem>
</ComboBox>
如何设置组合框的选定项具有
名称
?在从持久性存储器读取数据后,我想在MV构造函数中设置所选项。您需要将SelectedValuePath=“Name”添加到组合框中。然后在ViewModel构造函数中,像这样添加启动项。我将SelectedDropDown属性设置为字符串,不确定是否必须将其作为您的案例中的ComboBoxItem
public MainFormViewModel()
{
SelectedDropDown = "cbi1";
}
private string _SelectedDropDown;
public string SelectedDropDown
{
get { return _SelectedDropDown; }
set { _SelectedDropDown = value; NotifyPropertyChanged("SelectedDropDown"); }
}
这是ComboBox代码,经过测试,效果良好
<ComboBox x:Name="comboBox1" HorizontalAlignment="Left" Margin="114,213,0,0" SelectedValuePath="Name" SelectedValue="{Binding SelectedDropDown }" VerticalAlignment="Top" Width="120" Grid.Column="1">
<ComboBoxItem Name="cbi1">Item 1</ComboBoxItem>
<ComboBoxItem Name="cbi2">Item 2</ComboBoxItem>
<ComboBoxItem Name="cbi3">Item 3</ComboBoxItem>
</ComboBox>
项目1
项目2
项目3
您需要将SelectedValuePath=“Name”添加到组合框中。然后在ViewModel构造函数中,像这样添加启动项。我将SelectedDropDown属性设置为字符串,不确定是否必须将其作为您的案例中的ComboBoxItem
public MainFormViewModel()
{
SelectedDropDown = "cbi1";
}
private string _SelectedDropDown;
public string SelectedDropDown
{
get { return _SelectedDropDown; }
set { _SelectedDropDown = value; NotifyPropertyChanged("SelectedDropDown"); }
}
这是ComboBox代码,经过测试,效果良好
<ComboBox x:Name="comboBox1" HorizontalAlignment="Left" Margin="114,213,0,0" SelectedValuePath="Name" SelectedValue="{Binding SelectedDropDown }" VerticalAlignment="Top" Width="120" Grid.Column="1">
<ComboBoxItem Name="cbi1">Item 1</ComboBoxItem>
<ComboBoxItem Name="cbi2">Item 2</ComboBoxItem>
<ComboBoxItem Name="cbi3">Item 3</ComboBoxItem>
</ComboBox>
项目1
项目2
项目3
必须从ViewModel创建集合才能使用SelectedItem
*.xaml(视图)
*.cs(视图模型)
public类主视图模型:INotifyPropertyChanged
{
公共主视图模型()
{
对于(int i=0;i<10;i++)
{
MyCollection.添加(“项目”+i);
}
MySelectedItem=“第2项”;
}
私有ObservableCollection myCollection=新ObservableCollection();
公共可观测集合MyCollection
{
得到
{
回采;
}
设置
{
myCollection=value;
NotifyPropertyChanged(“MyCollection”);
}
}
私有字符串_mySelectedItem;
公共字符串MySelectedItem
{
得到
{
返回_mySelectedItem;
}
设置
{
_mySelectedItem=值;
NotifyPropertyChanged(“MySelectedItem”);
}
}
//NotifyPropertyChanged
公共事件属性更改事件处理程序属性更改;
受保护的void NotifyPropertyChanged(字符串信息)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(信息));
}
}
}
必须从ViewModel创建集合才能使用SelectedItem
*.xaml(视图)
*.cs(视图模型)
public类主视图模型:INotifyPropertyChanged
{
公共主视图模型()
{
对于(int i=0;i<10;i++)
{
MyCollection.添加(“项目”+i);
}
MySelectedItem=“第2项”;
}
私有ObservableCollection myCollection=新ObservableCollection();
公共可观测集合MyCollection
{
得到
{
回采;
}
设置
{
myCollection=value;
NotifyPropertyChanged(“MyCollection”);
}
}
私有字符串_mySelectedItem;
公共字符串MySelectedItem
{
得到
{
返回_mySelectedItem;
}
设置
{
_mySelectedItem=值;
NotifyPropertyChanged(“MySelectedItem”);
}
}
//NotifyPropertyChanged
公共事件属性更改事件处理程序属性更改;
受保护的void NotifyPropertyChanged(字符串信息)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(信息));
}
}
}
你不能那样做。ComboBoxItem是一种引用类型,在您的ViewModel中,您将无法获取ComboxItem的引用。因此,您可以使用SelectedIndex而不是SelectedItemSelectedIndex,但这不是最佳解决方案。要使SelectedItem正常工作,我必须从ViewModel中创建并填充组合框项,这是我的理解吗?如果您知道如何回答,我们将不胜感激。您必须在ViewModel上创建它。我会回答你不能那样做。ComboBoxItem是一种引用类型,在您的ViewModel中,您将无法获取ComboxItem的引用。因此,您可以使用SelectedIndex而不是SelectedItemSelectedIndex,但这不是最佳解决方案。要使SelectedItem正常工作,我必须从ViewModel中创建并填充组合框项,这是我的理解吗?如果您知道如何回答,我们将不胜感激。您必须在ViewModel上创建它。我将给出答案
public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel()
{
for (int i = 0; i < 10; i++)
{
MyCollection.Add("Item " + i);
}
MySelectedItem = "Item 2";
}
private ObservableCollection<string> myCollection = new ObservableCollection<string>();
public ObservableCollection<string> MyCollection
{
get
{
return myCollection;
}
set
{
myCollection = value;
NotifyPropertyChanged("MyCollection");
}
}
private string _mySelectedItem;
public string MySelectedItem
{
get
{
return _mySelectedItem;
}
set
{
_mySelectedItem = value;
NotifyPropertyChanged("MySelectedItem");
}
}
//NotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}