我想要一个带有两个选项“M”和“F”的ComboBox,并使用其中一个值的字符串设置我的代码中的选择。这似乎是如此基本,甚至要求尴尬。但是,我没有看到一个不包含50行代码和自定义类等的示例等。为了使事情变得更容易,我想在我的XAML中预先填充这两个选项。为什么这个简单的任务让我觉得自己像一个精神侏儒?这就是我所拥有的:
<ComboBox x:Name="cboGender" >
<ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
<ComboBoxItem Tag="F" Content="F"></ComboBoxItem>
</ComboBox>
代码背后:
cboGender.SelectedValue = "M";
在粉碎我的电脑并永远回到ASP.NET开发之前请帮忙。
答案 0 :(得分:2)
尝试以下方法:
cboGender.ItemsSource = new string [] { "M", "F" };
cboGender.SelectedItem = "M";
您需要将ItemsSource设置为项目集合。然后ComboBox将为您生成ComboBoxItems。
答案 1 :(得分:1)
添加SelectedValuePath
并运行:
<ComboBox x:Name="cboGender" SelectedValuePath="Content" >
<ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
<ComboBoxItem Tag="F" Content="F"></ComboBoxItem>
</ComboBox>
( SelectedValuePath="Tag"
也会起作用,在两个地方拥有相同的数据似乎都是多余的,但无论如何)
作为旁注,类似于科林的答案,您可以设置如下项目:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<ComboBox x:Name="cboGender">
<sys:String>M</sys:String>
<sys:String>F</sys:String>
</ComboBox>
( SelectedItem
和SelectedValue
都适用于此案例)
答案 2 :(得分:0)
在粉碎你的系统之前试试这个 - cboGender.SelectedIndex = 0;
.. :)
答案 3 :(得分:0)
首先,如果您在代码中操作WPF UI元素,那么您做错了。当然,您可以创建一个带有“M”和“F”的组合框并预设其选择:
<ComboBox>
<ComboBoxItem>M</ComboBoxItem>
<ComboBoxItem>F</ComboBoxItem>
<ComboBox.SelectedIndex>0</ComboBox.SelectedIndex>
</ComboBox>
但那又怎么样?你怎么做这个选择?如果你的回答涉及这样的事情:
if cboGender.SelectedValue == "M"
你正沿着一条道路前进,这将导致你编写非常难以维护的程序。
另一方面,如果您创建了一个将UI绑定到的类,如下所示:
public class MyViewModel
{
public MyViewModelClass()
{
Gender = "M";
}
public IEnumerable<string> Genders { get { return new string[] { "M", "F" } };
public string Gender { get; set; }
}
然后您的XAML - 假设您已将DataContext
设置为MyViewModel
的实例的某个位置 - 变为:
<ComboBox ItemsSource="{Binding Genders}" SelectedValue="{Binding Gender}"/>
使用Gender
属性的任何其他逻辑现在都会查看此类,而不是UI。因此,您可以在不影响逻辑的情况下更改UI,反之亦然。
(请注意,虽然视图模型通常会实现INotifyPropertyChanged
,但如果您要更改代码中的Gender
并希望更改{{1}},则只需 来执行此操作要在UI中反映的新值。)