【问题标题】:Catch ChangeEvents from ObservableDictionary in MVVM C# WPF从 MVVM C#​​ WPF 中的 ObservableDictionary 捕获 ChangeEvents
【发布时间】:2018-02-01 15:14:38
【问题描述】:

我有一个包含产品元信息的软件(带有 GUI)。该信息的一部分是该产品组件的一些评级。

我想以某种方式为某人点击的每个产品显示此评分:

Part a: 100%
Part b: 20%
Part c: -
Part d: 40%

它可能有很多值,我不想为每个可能的评分创建一个自己的变量。

我的问题是我有很多缺失的值,但我希望 GUI 总是看起来一样,所以我想到了一个可观察的字典来存储我的数据(来自动态的网络界面,用于某人点击的产品)和将 wpf 元素绑定到该字典的值。

我在 stackoverflow post 中找到了 ObservableDictionary 的实现,其中包含指向 Implementation 的链接。


以下是我的代码的一些部分,以显示我的问题所在:

我的视图实现如下所示:

<TextBlock Text="{Binding Path=Ratings, Converter={StaticResource ObservableDictionaryConverter}, ConverterParameter=Key}"/>

Ratings 是我的 Observable Dictionary,Key 是我的硬编码组件(例如“Part a”),ObservableDictionaryConverter 是一个转换器,如果存在则返回评级,如果不存在则返回“-”。

我的 ModelView 实现如下所示

public class Foo : Bindable
{
    ObservableDictionary<string, ComponentRatings> _ratings
    public ObservableDictionary<string, ComponentRatings> Ratings
        {
            get {return _ratings; }
            set
            {
                _ratings = value;
                OnPropertyChanged();
            }
        }
}

还有模特:

ViewModel.Ratings= new ObservableDictionary<string, ComponentRatings>();
foreach (var e in foo)
{
    ViewModel.Ratings.Add(e.Drive.ToString(), e);
}

1.) 如果我运行我的代码,则由于我的 ModelView 属性中的 OnPropertyChanged() 而实例化 Dictionary 时,gui 只会自行更新。但是当我向字典中添加新元素时,我的 GUI 应该会自行更新并显示它们。那么如何在我的 ModelView 中从 Observable Dictionary 中捕获 CollectionChanged 事件?

2.) XAML 中的硬编码键不是很好,但我想不出更好的方法来始终在 GUI 中显示我的所有评分,即使它们不存在.有没有更好、更灵活的方法来实现这样的事情?

【问题讨论】:

  • TextBlock 不听CollectionChanged。也许这可以帮助你:stackoverflow.com/questions/36661607/…
  • 谢谢!!这正是问题所在。让它成为答案,您将获得 15 声望 ;-)
  • 不客气 :)

标签: c# wpf mvvm observablecollection


【解决方案1】:

问题是TextBlock 不听CollectionChanged 事件。因此,您需要手动侦听更改并更新后面代码中的TextBlock,或者更好的是,引发TextBlock 可以从您的ObservableDictionary 订阅的事件。

您可以找到使用List here 完成此操作的示例。

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2010-10-20
    相关资源
    最近更新 更多