C#-WPF ComboBox未在代码隐藏

时间:2019-05-12 00:08:33

标签: c# wpf

我的WPF应用程序的以下代码将默认值显示为空白,而不是CA。我已经在调试模式下测试过,cmbStates.SelectedValueNULL中使用F11时移至下一行后,VS2017会显示comboBox。我尝试将代码移至Windows加载的事件,但仍然是完全相同的行为。

注意

  1. 根据this的帖子,它应该可以工作,但是不能。也许我的情况有所不同
  2. 该代码成功显示了<Window x:Class="WpfTestApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" .... .... > <Grid> .... .... <ComboBox x:Name="cmbStates" IsEditable="True" SelectedValuePath="Content" SelectionChanged="cmbStates_SelectionChanged" /> .... .... </Grid> </Window> 值,但comboBox的顶部为空白,除非我手动为comboBox选择一个特定的值。

问题:我在这里可能会缺少什么,我们如何使它起作用?

XAML

....
public MainWindow()
{
    InitializeComponent();

    cmbStates.ItemsSource = new List<string>() {"OH", "VA", "CA", "TN", "CA", "DE"};
    cmbStates.SelectedValue =  "CA";
}
....

MainWindow的背后代码

Code Behind

更新

请注意,这个问题是针对在XAML中而不是在npm install --save @types/node 中设置默认值,因为列表的长度比这篇文章中显示的要长(为简便起见),并且默认值价值并不总是“ CA”-它随业务需求而变化。您可以将“ CA”视为某些字符串变量值,但是想法是相同的。

2 个答案:

答案 0 :(得分:0)

为什么不显示所选项目是此xml属性:

SelectedValuePath="Content"

虽然SelectedValue设置为“ CA”,但它不会显示,因为您建议视图检查SelectedItem的属性 Content ,其中您使用的string不存在课程。

为了使其适用于上述示例,您只需在组合框中删除该属性即可。

另一方面,如果绑定的项目是类,并且您需要显示一个字段,而另一个字段作为值/标识符,则SelectedValuePathDisplayMemberPath结合将是有意义的属性。

假设您的商品看起来像这样:

public class SomeModel
{
    public string Abbreviation { get; set; }
    public string Content { get; set; }

    public SomeModel(string abbreviation, string content)
    {
        Abbreviation = abbreviation;
        Content = content;
    }
}

在这种情况下,ComboBox看起来像这样:

<ComboBox x:Name="cmbStates" IsEditable="True" SelectedValuePath="Abbreviation" DisplayMemberPath="Content" SelectionChanged="cmbStates_SelectionChanged" />

通过这种方式,缩写属性是ComboBoxItem的实际值,而 Content 用作ComboBox的显示。现在,您的MainWindow构造函数将如下所示:

public MainWindow()
{
    InitializeComponent();

    cmbStates.ItemsSource = new List<SomeModel>
    {
        new SomeModel("OH","Ohio"), new SomeModel("VA","Virginia"), new SomeModel("CA","California "),
        new SomeModel("TN","Tennessee"), new SomeModel("DE","Delaware")
    };
    cmbStates.SelectedValue = "CA";
}

除了这种情况,我建议您研究WPF data bindingWPF MVVM pattern

答案 1 :(得分:0)

由于您将ItemsSource的{​​{1}}设置为ComboBox,因此应将List<string>属性设置为此列表中包含的SelectedItem并从XAML中删除string,因为SelectedValuePath="Content"没有string属性:

Content

XAML:

cmbStates.ItemsSource = new List<string>() {"OH", "VA", "CA", "TN", "CA", "DE"};
cmbStates.SelectedItem =  "CA";