C# Can';t将所选内容绑定到WPF组合框
我希望有一个带有两个选项“M”和“F”的组合框,并用一个值字符串设置代码中的选择。这看起来很基本,连问都不好意思。但是,我没有看到一个示例不包含50行带有自定义类的代码,等等。为了使事情更简单,我想在XAML中预先填充两个选项。为什么这个简单的任务让我觉得自己像个侏儒?这就是我所拥有的:C# Can';t将所选内容绑定到WPF组合框,c#,wpf,xaml,data-binding,combobox,C#,Wpf,Xaml,Data Binding,Combobox,我希望有一个带有两个选项“M”和“F”的组合框,并用一个值字符串设置代码中的选择。这看起来很基本,连问都不好意思。但是,我没有看到一个示例不包含50行带有自定义类的代码,等等。为了使事情更简单,我想在XAML中预先填充两个选项。为什么这个简单的任务让我觉得自己像个侏儒?这就是我所拥有的: <ComboBox x:Name="cboGender" > <ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
<ComboBox x:Name="cboGender" >
<ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
<ComboBoxItem Tag="F" Content="F"></ComboBoxItem>
</ComboBox>
请在我打碎电脑并永远回到ASP.NET开发之前提供帮助。尝试以下操作:
cboGender.ItemsSource = new string [] { "M", "F" };
cboGender.SelectedItem = "M";
您需要将ItemsSource设置为项目集合。然后,ComboBox将为您生成ComboBoxItems 试试这个-
cbogener.SelectedIndex=0代码>在破坏系统之前…) 添加,它就可以工作了:
<ComboBox x:Name="cboGender" SelectedValuePath="Content" >
<ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
<ComboBoxItem Tag="F" Content="F"></ComboBoxItem>
</ComboBox>
M
F
(在这种情况下,SelectedItem
和SelectedValue
都起作用)一级近似值,如果您在代码中操纵WPF UI元素,那么您就是做错了。当然,您可以创建一个带有“M”和“F”的组合框,并预设其选择:
<ComboBox>
<ComboBoxItem>M</ComboBoxItem>
<ComboBoxItem>F</ComboBoxItem>
<ComboBox.SelectedIndex>0</ComboBox.SelectedIndex>
</ComboBox>
您正在沿着一条道路前行,这条道路将引导您编写非常难以维护的程序
另一方面,如果您创建一个类来绑定UI,如下所示:
if cboGender.SelectedValue == "M"
public class MyViewModel
{
public MyViewModelClass()
{
Gender = "M";
}
public IEnumerable<string> Genders { get { return new string[] { "M", "F" } };
public string Gender { get; set; }
}
使用Gender
属性的任何其他逻辑现在都会查看这个类,而不是UI。因此,您可以在不影响逻辑的情况下更改UI,反之亦然
(请注意,虽然视图模型通常实现INotifyPropertyChanged
,但如果您要更改代码中的性别,并希望新值反映在UI中,则只需执行此操作。)这一点不错,尽管设置SelectedValuePath=“Content”感觉有点恶心!
public class MyViewModel
{
public MyViewModelClass()
{
Gender = "M";
}
public IEnumerable<string> Genders { get { return new string[] { "M", "F" } };
public string Gender { get; set; }
}
<ComboBox ItemsSource="{Binding Genders}" SelectedValue="{Binding Gender}"/>