2010-12-12 45 views
1

我遇到了一个问题,我很惊讶,我找不到任何有关的讨论(除WPF MVVM ComboBox SelectedItem or SelectedValue not working也许)。将SelectedItem绑定为ItemsSource的绑定未完成

我有一个MVVM窗体,有2 ctors,一个是“新项目创建”,另一个是“项目修改”。我有一个组合框表示该项目的一个属性。

在修改ctor中,绑定到ItemsSource的属性被初始化,然后绑定到SelectedItem的属性被设置。但是在用户界面中没有选择任何内容,除非我延迟(即使很小一点)SelectedItem设置。

我该如何解决这个问题?我体面不能保持一个计时器完全随机的间隔来解决该问题:d

谢谢您的帮助

+0

你可以尝试SelectedIndex?它在过去为我工作。 – Kugel 2010-12-12 20:26:05

+0

我遵循你的建议并尝试了这个,但问题是完全一样的:它只影响UI中的selectedItem,如果有点延迟。 – 2010-12-13 00:17:14

回答

0

这似乎是优雅的方式来保证的ItemsSource初始化之前我设置来自VM的SelectedItem将拥有在我的视图资源中声明的ItemsSource的绑定源(不管它是什么)。 我敢肯定,现在有人可以将我引向光明,我已经指出了这一点。

我已经尝试过使用CollectionViewSource,但没有找到在不中断MVVM模式的情况下使用其过滤器功能的方法。另外,我不知道如何重新提升过滤器,因为我曾经使用过ICollectionView.Filter(过滤出的项目取决于另一个组合框的选择,没有什么真正稀奇的imo)。

也许在视图中声明并用作ItemsSource的资源不一定是CVS,我在这里寻找建议。

- 编辑 - 我发现IsSynchronizedWithCurrentItem =“True”解决方案遍布整个网络实际上正在工作。我被误导了,因为它没有解决我的问题,因为我的控件上没有使用剩余的SelectedValuePath。

0
public MyViewModel() 
{ 
    this.Items = ...; 
    //this.SelectedItem = ...; 

    // select in separate message so that the ItemsSource has definitely been set 
    this.Dispatcher.BeginInvoke(delegate 
    { 
     this.SelectedItem = ...; 
    }); 
} 
+0

这对我不起作用。你有过类似的案例吗? – 2010-12-12 22:43:47