繁体   English   中英

无法将选择绑定到WPF组合框

[英]Can't bind selection to WPF 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开发之前,请提供帮助。

请尝试以下操作:

cboGender.ItemsSource = new string [] { "M", "F" };
cboGender.SelectedItem = "M";

您需要将ItemsSource设置为项目集合。 然后,ComboBox将为您生成ComboBoxItems。

添加SelectedValuePath ,它可以工作:

<ComboBox x:Name="cboGender" SelectedValuePath="Content" >
    <ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
    <ComboBoxItem Tag="F" Content="F"></ComboBoxItem>
</ComboBox>

SelectedValuePath="Tag"也会起作用,尽管在两种情况下在两个地方使用相同的数据似乎都是多余的


作为旁注,类似于Colin的答案,您可以设置以下项:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
<ComboBox x:Name="cboGender">
    <sys:String>M</sys:String>
    <sys:String>F</sys:String>
</ComboBox>

在这种情况下, SelectedItemSelectedValue工作

试试这个cboGender.SelectedIndex = 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; }
}

然后,您的MyViewModel假设您已将DataContext设置为MyViewModel的实例, MyViewModel变为:

<ComboBox ItemsSource="{Binding Genders}" SelectedValue="{Binding Gender}"/>

现在,使用Gender属性的任何其他逻辑都将查看此类,而不是UI。 因此,您可以在不影响逻辑的情况下更改UI,反之亦然。

(请注意,尽管视图模型通常实现INotifyPropertyChanged ,但仅当您要在代码中更改Gender并希望新值反映在UI中时,才要这样做。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM