【发布时间】:2014-03-30 23:20:58
【问题描述】:
我有一个绑定到 tbPublications 的 ObservableCollection 的 ComboBox,它会按应有的方式填充。然后我从 DataGrid 中选择一行,该行触发另一个 Create 表单,在该表单中我将一条新记录插入tbPublications,一切都很好。
当我关闭所说的创建表单并返回到我的 ComboBox 表单时,我正在清除并重新阅读 ObservableCollection 的一个新项目,将用户返回到他们刚刚创建的项目。然后 ComboBox 会显示我新填充的集合中的一项,一切都很好。
我的问题是,在返回我的 ComboBox 表单时,新出版物未设置为 ComboBox 显示中的选定项目,用户必须单击 ComboBox 然后选择该项目。
我不能在我的视图 XAML 中使用 SelectedIndex = "0",因为我想在页面加载时在我的 ComboBox 中显示整个 ObservableCollection。
有什么方法可以在 ViewModel 中使用方法来解决这个问题,比如..
private void SetSelectedIndex()
{
if (MyObservableCollection.Count == 1)
{
//Set selected indexer to "0";
}
}
找到了解决方案,不确定它是否是最干净的“MVVM”解决方案...
在阅读了我的 ObservableCollection 之后,我调用了这个方法:
if (_ModelPublicationsObservableList.Count == 1)
{
SelectedPublication = _ModelPublication;
SetSelectedIndex();
}
这是获取当前主窗口并设置 SelectedIndex 的方法:
private void SetSelectedIndex()
{
ArticlesDataGridWindow singleOrDefault = (ComboBoxWindow)Application.Current.Windows.OfType<ComboBoxWindow>().SingleOrDefault(x => x.IsLoaded);
singleOrDefault.comboBox1.SelectedIndex = 0;
}
【问题讨论】: