首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComboBox SelectedIndex MVVM

ComboBox SelectedIndex MVVM
EN

Stack Overflow用户
提问于 2014-02-27 21:30:25
回答 2查看 16.6K关注 0票数 1

我有一个绑定到tbPublications的ObservableCollection的ComboBox,它会按应该的方式进行填充。然后,我从触发另一个Create表单的DataGrid中选择一行,在该表单中向tbPublications插入一条新记录,一切正常。

当我关闭create form并返回到我的ComboBox表单时,我正在清除并重新读取ObservableCollection中的一个新项目,使用户返回到他们刚刚创建的项目。然后,ComboBox显示我新填充的集合中的一项: all good。

我的问题是,在返回到我的ComboBox表单时,新发布内容没有在ComboBox显示中设置为选定项,用户必须单击ComboBox,然后选择该项。

我不能在视图XAML中使用SelectedIndex = "0",因为我想在页面加载时在ComboBox中显示整个ObservableCollection

有没有办法在ViewModel中使用一个方法来解决这个问题,比如..

代码语言:javascript
复制
      private void SetSelectedIndex()
      {
        if (MyObservableCollection.Count == 1)
        {
            //Set selected indexer to "0";
        }
      }

找到了一个解决方案,不确定它是否是最干净的'MVVM‘解决方案...

在读入我的ObservableCollection之后,我调用这个方法:

代码语言:javascript
复制
 if (_ModelPublicationsObservableList.Count == 1)
                {
                    SelectedPublication = _ModelPublication;
                    SetSelectedIndex();
                }

下面是获取当前主窗口并设置SelectedIndex的方法:

代码语言:javascript
复制
 private void SetSelectedIndex()
    {
        ArticlesDataGridWindow singleOrDefault = (ComboBoxWindow)Application.Current.Windows.OfType<ComboBoxWindow>().SingleOrDefault(x => x.IsLoaded);
        singleOrDefault.comboBox1.SelectedIndex = 0;        
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-27 21:46:29

您是否考虑过使用combobox的SelectedItem属性?您可以绑定combobox的selected item属性来获取或设置所选项目。

XAML

代码语言:javascript
复制
<ComboBox ItemsSource="{Binding Path=Publications}" SelectedItem="{Binding Path=SelectedPublication, Mode=TwoWay}" />

ViewModel

代码语言:javascript
复制
public class ItemListViewModel
{
    public ObservableCollection<Publication> Publications {get; set;}

    private Publication _selectedPublication;
    public Publication SelectedPublication 
    {
        get { return _selectedPublication; }
        set
        {
            if (_selectedPublication== value) return;
            _selectedPublication= value;
            RaisePropertyChanged("SelectedPublication");
        }
    }
}

如果要设置视图模型中的选定项,可以将SelectedPublication属性设置为-

代码语言:javascript
复制
SelectedPublication = Publications[0];

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

票数 8
EN

Stack Overflow用户

发布于 2014-02-28 19:31:19

UpdateSourceTrigger=PropertyChanged添加到绑定中。

代码语言:javascript
复制
SelectedItem={Binding Path=SelectedPublication, Mode=TwoWay}, UpdateSourceTrigger=PropertyChanged}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22070049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档