无法将选择绑定到WPF Combobox

时间:2011-07-31 04:20:23

标签: c# wpf xaml data-binding combobox

我想要一个带有两个选项“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开发之前请帮忙。

4 个答案:

答案 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>

SelectedItemSelectedValue都适用于此案例

答案 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中反映的新值。)