【发布时间】:2018-03-22 22:11:35
【问题描述】:
我正在使用 WPF(C#、Visual Studio 2010、MVVM Light)并且遇到三个列表框控件的问题。
所以情况如下:我有三个列表框。第一个是作为“示例”的 ID 列表。第二个也是“相关项目”的 ID 列表。它们是我的程序中代表动词的类(如语言类型)的示例和相关项目。
如果您单击这两个 ListBox 中的任何一个,它将填充第三个 ListBox。两者互不影响,只有第三种。第三个不影响其他两个。第三个一次只能容纳一件物品。
它运作良好,除了一种情况。假设“示例”ListBox 包含 ID 100002 和 100003。假设“相关项”ListBox 包含 ID 100004 和 100005。我单击 100002,因此第一个 ListBox 的选定项变为该项。第三个列表框显示 100002 的详细信息(应该如此)。然后我在第二个 Listbox 中单击 100004。这成为第二个 Listbox 的选定项,第三个 Listbox 显示 100004。到目前为止很好。但是现在让我们说无论出于何种原因我想再次回到 100002。由于它仍然是第一个 Listbox 中的选定项,因此再次单击它没有任何效果。视图模型中的设置器甚至没有被触发,所以我不能在那里做任何事情。事实上,我不确定在这种情况下我的选择是什么。我确实考虑过使用“示例”的设置器将“相关项目”的选定项目设置为空,反之亦然,但我意识到这会导致无限循环。
我还尝试使用一个变量来链接到前两个 ListBox 的选定项目,但这并没有解决问题。
我还尝试了以下方法:
private LanguageItemViewModel _selectedExampleOrRelatedItemTestVM = null;
public LanguageItemViewModel SelectedExampleOrRelatedItemTestVM
{
get { return _selectedExampleOrRelatedItemTestVM; }
set
{
if (_selectedExampleOrRelatedItemTestVM != value)
{
Mediator.EventMediator.Instance.PassLanguageItemAsExampleOrRelatedItem(value);
_selectedExampleOrRelatedItemTestVM = null;
RaisePropertyChanged("SelectedExampleOrRelatedItemTestVM");
}
}
}
这样,在相关事件被触发后,变量本身就被设置为 null。这也行不通。
也许有人提出了一些建议,甚至是一些我没有考虑过的途径?谢谢。
【问题讨论】:
-
这听起来像是 UI 设计的缺陷。