我的WPF
应用程序的以下代码将默认值显示为空白,而不是CA
。我已经在调试模式下测试过,cmbStates.SelectedValue
在NULL
中使用F11
时移至下一行后,VS2017
会显示comboBox
。我尝试将代码移至Windows加载的事件,但仍然是完全相同的行为。
注意:
<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”视为某些字符串变量值,但是想法是相同的。
答案 0 :(得分:0)
为什么不显示所选项目是此xml
属性:
SelectedValuePath="Content"
虽然SelectedValue
设置为“ CA”,但它不会显示,因为您建议视图检查SelectedItem
的属性 Content ,其中您使用的string
不存在课程。
为了使其适用于上述示例,您只需在组合框中删除该属性即可。
另一方面,如果绑定的项目是类,并且您需要显示一个字段,而另一个字段作为值/标识符,则SelectedValuePath
与DisplayMemberPath
结合将是有意义的属性。
假设您的商品看起来像这样:
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 binding和WPF 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";