【问题标题】:Bind SelectedItem as ItemsSource's binding's not completed将 SelectedItem 绑定为 ItemsSource 的绑定未完成
【发布时间】:2011-05-24 08:28:06
【问题描述】:

我遇到了一个问题,我很惊讶我找不到任何讨论(WPF MVVM ComboBox SelectedItem or SelectedValue not working 可能除外)。

我有一个 MVVM 表单,它有 2 个 ctor,一个用于“创建新项目”,另一个用于“项目修改”。我有一个组合框,它代表项目的一个属性。

在修改ctor中,初始化绑定到ItemsSource的属性,然后设置绑定到SelectedItem的属性。但是 UI 中没有选择任何内容,除非我延迟(甚至一点点)SelectedItem 集。

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

感谢您的帮助

【问题讨论】:

  • 你可以试试 SelectedIndex 吗?过去它对我有用。
  • 我按照你的建议尝试了这个,但问题是完全一样的:如果有点延迟,它只会影响 UI 中的 selectedItem。

标签: wpf mvvm


【解决方案1】:
public MyViewModel()
{
    this.Items = ...;
    //this.SelectedItem = ...;

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

【讨论】:

  • 这对我不起作用。你有没有处理过类似的案例?
【解决方案2】:

在我从 VM 设置 SelectedItem 之前确保 ItemsSource 已初始化的优雅方法似乎是在我的视图资源中声明 ItemsSource 的绑定源(无论它是什么)。 既然我已经指出了这一点,我相信有人可以带领我走向光明。

我尝试过使用 CollectionViewSource,但没有找到在不破坏 MVVM 模式的情况下使用其过滤器功能的方法。另外,我不知道如何像使用 ICollectionView.Filter 那样重新提升过滤器(过滤掉的项目取决于另一个组合框选择,没有什么真正的幻想)。

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

--编辑-- 我发现遍布网络的 IsSynchronizedWithCurrentItem="True" 解决方案实际上是有效的。我被误导了,因为在我的控件上不再使用剩余的 SelectedValuePath,它在第一次尝试时没有解决我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 2011-02-27
    • 2015-06-28
    • 1970-01-01
    • 2012-11-05
    • 2017-05-11
    • 2014-12-10
    • 1970-01-01
    相关资源
    最近更新 更多