【发布时间】:2016-09-17 16:21:39
【问题描述】:
我有 2 个组合框,每个组合框有 2 种方法用于 _Loaded 和 _Selection 已更改
我想在第一个组合框中选择一个位置,然后下一个组合框应该列出该特定位置的一堆日期
这是我目前所拥有的:
<ComboBox
x:Name="comboBoxLocation"
Text="Lokation"
HorizontalAlignment="Left" Margin="50,305,0,0"
VerticalAlignment="Top"
Width="120"
Loaded="ComboBoxLocation_Loaded"
SelectionChanged="ComboBoxLocation_SelectionChanged"/>
<ComboBox x:Name="comboBoxDate"
Text="Dato" HorizontalAlignment="Left"
Margin="195,305,0,0"
VerticalAlignment="Top" Width="120"
Loaded="ComboBoxDate_Loaded"
SelectionChanged="ComboBoxDate_SelectionChanged"/>
和
private void ComboBoxLocation_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var comboBoxLocation = sender as ComboBox;
comboBoxDate.SelectedIndex = 0;
comboBoxDate.ItemsSource = controller.GetBusTimes();
//ComboBoxDate_Loaded(sender, e);
}
private void ComboBoxDate_Loaded(object sender, RoutedEventArgs e)
{
List<string> dataDate = controller.GetBusTimes();
var comboBoxDate = sender as ComboBox;
comboBoxDate.ItemsSource = dataDate;
}
这似乎比我预期的要困难得多...我开始认为我可能在这里犯了一些根本性错误...
我一直在摆弄这个...我可以设法在第一个框中显示位置列表,并在第二个框中显示该位置的相关日期。但是当我更改第一个位置时,日期保持不变...
我该怎么办?
【问题讨论】:
-
我会将第一个组合框的选定项目绑定到您的视图模型中的一个属性,并在设置器中更改另一个属性中的项目集合(应该是可观察的),该属性也绑定在图形用户界面。你知道我的意思吗?
-
“犯了一些根本性的错误” - 你使用 wpf 就像它是 winforms,所以你继承了后者的所有绑定问题。使用 MVVM 模式可以很容易地创建数据的主/细节关系。例如。将项目集合绑定到一个组合框
ItemsSource(并仅显示位置),其中SelectedItem绑定到设置器中的属性,您更新其详细信息(创建另一个集合并上升通知)绑定到第二个组合框ItemsSource。跨度> -
而你的错误实际上是试图使用
Loaded事件。它只上升了一次。而是在comboBoxLocation_SelectionChanged中重新设置comboBoxDate.ItemsSource。我看到您尝试过(注释行),您可能需要分两步进行(首先将其设置为null)。 -
我不确定他是否听说过或使用过 MVVM。也许有人应该介绍一下 MVVM 如何让他轻松完成他想要的事情。