我有必然的tbPublications
一个ObservableCollection其中填充,因为它应该具有ComboBox。然后,我从另一个触发创建我插入新记录到tbPublications
形式,都好一个DataGrid选择一行。组合框的SelectedIndex MVVM WPF
当我关闭所述创建表单并返回到我的ComboBox表单时,我正在清除并重新读取我的ObservableCollection
中的一个新项目,并将用户返回到他们刚创建的项目。 ComboBox然后显示我新近填充的集合中的一个项目,都很好。
我的问题是,在返回我的组合框的形式,新的出版物中没有被设置为在组合框显示所选项目,用户必须点击,然后下拉框中选择项目。
在我看来,我不能使用SelectedIndex = "0"
XAML,因为我想在页面加载时在我的ComboBox中显示整个ObservableCollection
。
有没有办法使用的视图模型的方法也许要解决这个问题,事情也许如..
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;
}
+1。这几乎总是去,除了在案件的方式在概念上的“选择价值”是*的项目在'ComboBox'一个*性质(而不是项目本身),在这种情况下,人们可以使用'SelectedValue'和“SelectedValuePath”。在跟随MVVM时几乎没有理由使用'SelectedIndex'。 –
是的,我的ViewModel中有一个SelectedPublication属性。我的XAML设置为'SelectedItem =“{Binding SelectedPublication,Mode = TwoWay}”',但ComboBox不显示ObservableCollection中的第1行,我仍然需要点击下拉列表并选择它... – Hardgraf
编辑,可能不是最干净的MVVM解决方案... – Hardgraf