Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t将所选内容绑定到WPF组合框_C#_Wpf_Xaml_Data Binding_Combobox - Fatal编程技术网

C# Can';t将所选内容绑定到WPF组合框

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>

我希望有一个带有两个选项“M”和“F”的组合框,并用一个值字符串设置代码中的选择。这看起来很基本,连问都不好意思。但是,我没有看到一个示例不包含50行带有自定义类的代码,等等。为了使事情更简单,我想在XAML中预先填充两个选项。为什么这个简单的任务让我觉得自己像个侏儒?这就是我所拥有的:

<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}"/>