【问题标题】:Binding TextBox to ObservableCollection.Count WPF?将 TextBox 绑定到 ObservableCollection.Count WPF?
【发布时间】:2014-06-11 14:58:47
【问题描述】:

我有一个TextBox,其文本绑定到ObervableCollection 的计数,它向用户显示在绑定到同一个集合的UI DataGrid 中显示了多少行。

Text="{Binding ModelviewArticleObservableList.Count, Mode=OneWay}" />

这很好用。但是,我有一个绑定到CommandClearButton,命令方法清除ObservableCollection 并读入新值。我的TextBox 上的计数导致了大内存问题,大概是因为它试图在读取值时迭代集合。

这不是应用程序加载的问题,因为当计数发生在视图中时(首先是 ViewModel),constructorInitializeComponent() 之前实例化了 viewModel。内存问题只是在调用ClearButton 命令时出现。

有什么方法可以让绑定休眠或者在ObservableCollection被编译之后调用Count方法?

这是我的视图模型中的 ObservableCollection 属性:

    private ObservableCollection<viewArticle> _ModelviewArticleObservableList = new ObservableCollection<viewArticle>();
    public ObservableCollection<viewArticle> ModelviewArticleObservableList
    {
        get { return _ModelviewArticleObservableList; }
        set
        {
            _ModelviewArticleObservableList = value;
            OnPropertyChanged("ModelviewArticleObservableList");                
        }
    }

【问题讨论】:

  • 也许只是新建一个新的 observable 集合并替换现有的

标签: c# wpf mvvm


【解决方案1】:

使用属性

public Int32 ArticleCount
{
    get
    {
        if (this.ModelviewArticleObservableList == null)
        {
            return 0;
        }
        else
        {
            return this.ModelviewArticleObservableList.Count;
        }
    }
}

然后,在 XAML 中,绑定到该属性

Text="{Binding ArticleCount, Mode=OneWay}" />

并且不要忘记在ModelviewArticleObservableList有修改时通知

RaisePropertyChange<Int32>(() => this.ArticleCount));

【讨论】:

  • 这是一个很棒的解决方案,非常清楚它在做什么并且易于维护。
  • 谢谢@Xaruth。我正在学习 MVVM 中公开属性的强大功能。 1 个问题,您如何使用 Int32 引发 RaisePropertyChange 事件?我只有 INPC 接口实现了一个字符串属性名称。我已经用我的财产更新了问题...
  • RaisePropertyChange 方法来自 Prism(其实我用的是我自己的方法,不过是一样的)。 RaisePropertyChange&lt;Int32&gt;(() =&gt; this.ArticleCount) 等于 RaisePropertyChange("ArticleCount")(调用 PropertyChangedEventArgs 处理程序)但我更喜欢用看起来更清晰的表达式调用。
猜你喜欢
  • 2013-08-10
  • 1970-01-01
  • 2011-05-25
  • 2018-11-09
  • 2011-05-20
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多