C# 组合框选择索引MVVM WPF

C# 组合框选择索引MVVM WPF,c#,wpf,xaml,mvvm,combobox,C#,Wpf,Xaml,Mvvm,Combobox,我有一个绑定到tbPublications的可观察集合的组合框,该集合按其应该的方式填充。然后,我从数据网格中选择一行,该行触发另一个Create表单,在该表单中,我将一条新记录插入tbPublications,一切正常 当我关闭所说的创建表单并返回到我的组合框表单时,我正在清除并重新读取我的ObservableCollection中的一个新项目,将用户返回到他们刚刚创建的项目。然后,组合框显示我新填充的集合中的一个项目,全部正常 我的问题是,在返回到我的组合框窗体时,新发布未在组合框显示中设置

我有一个绑定到
tbPublications
的可观察集合的组合框,该集合按其应该的方式填充。然后,我从数据网格中选择一行,该行触发另一个Create表单,在该表单中,我将一条新记录插入
tbPublications
,一切正常

当我关闭所说的创建表单并返回到我的组合框表单时,我正在清除并重新读取我的
ObservableCollection
中的一个新项目,将用户返回到他们刚刚创建的项目。然后,组合框显示我新填充的集合中的一个项目,全部正常

我的问题是,在返回到我的组合框窗体时,新发布未在组合框显示中设置为选定项,用户必须单击组合框,然后选择该项

我无法在我的视图中使用
SelectedIndex=“0”
,因为我想在页面加载时在我的组合框中显示整个
observeCollection

是否有任何方法可以使用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;        
    }
private void SetSelectedIndex()
{
ArticlesDataGridWindow singleOrDefault=(ComboBoxWindow)Application.Current.Windows.OfType().singleOrDefault(x=>x.IsLoaded);
singleOrDefault.comboBox1.SelectedIndex=0;
}

<代码> > p>您是否考虑使用COMBOBOX的SCORTEDION项目属性?您可以绑定combobox的selected item属性来获取或设置所选项目

XAML

<ComboBox ItemsSource="{Binding Path=Publications}" SelectedItem="{Binding Path=SelectedPublication, Mode=TwoWay}" />

或者您可以在<强>出版物<强>集合中找到所需的项目,并将其分配给<强>选择的发布< /强>属性.< /p> < p>您是否考虑使用COBOBOX的SealDestItitem属性?您可以绑定combobox的selected item属性来获取或设置所选项目

XAML

<ComboBox ItemsSource="{Binding Path=Publications}" SelectedItem="{Binding Path=SelectedPublication, Mode=TwoWay}" />

或者,您可以在出版物集合中找到所需的项目,并将其分配给SelectedPublication属性。

UpdateSourceTrigger=PropertyChanged添加到您的绑定中

SelectedItem={Binding Path=SelectedPublication, Mode=TwoWay}, UpdateSourceTrigger=PropertyChanged}

将UpdateSourceTrigger=PropertyChanged添加到绑定中

SelectedItem={Binding Path=SelectedPublication, Mode=TwoWay}, UpdateSourceTrigger=PropertyChanged}

+1.除了概念上的“选定值”是
组合框
中项目的属性(与项目本身相反)的情况外,这几乎总是可行的,在这种情况下,可以使用
SelectedValue
SelectedValuePath
。在跟踪MVVM时,几乎没有理由使用
SelectedIndex
。是的,因此,我的ViewModel中有一个SelectedPublication属性。我的XAML设置为“SelectedItem=“{Binding SelectedPublication,Mode=TwoWay}”,但是组合框没有显示ObservableCollection中的1行,我仍然需要单击下拉列表并选择它…@Hardgraf:您可能需要从视图模型中设置SelectedPublication属性来设置所选项。+1。除了概念上的“选定值”是
组合框
中项目的属性(与项目本身相反)的情况外,这几乎总是正确的做法,在这种情况下,可以使用
SelectedValue
SelectedValuePath
。在跟踪MVVM时,几乎没有理由使用
SelectedIndex
。是的,因此,我的ViewModel中有一个SelectedPublication属性。我的XAML设置为“SelectedItem=“{Binding SelectedPublication,Mode=TwoWay}”,但是组合框没有显示ObservableCollection中的1行,我仍然需要单击下拉列表并选择它…@Hardgraf:您可能需要从视图模型中设置SelectedPublication属性来设置所选项目。