【发布时间】:2014-06-23 14:44:54
【问题描述】:
我有一个类,派生自 BindableBase,它包含两个属性:
private string sourceCallNumber;
public string SourceCallNumber
{
get { return sourceCallNumber; }
set { SetProperty(ref sourceCallNumber, value); }
}
private string sourceMediaType;
public string SourceMediaType
{
get { return sourceMediaType; }
set { SetProperty(ref sourceMediaType, value); }
}
我有一个 ObservableCollection,其中包含许多使用该类的项目。
我有一个 GridView,我将 ItemsSource 设置为指向 ObservableCollection。
我的问题是,如果我更改其中一项的 SourceMediaType 的值,则显示不会更新。我已经进行了调试,并且可以确认更改值会导致 OnPropertyChanged 为该属性触发。
我已经阅读了很多关于类似问题的 SO 问题和答案,但我很困惑我需要做什么才能使其正常工作。
我的理解是,虽然 ObservableCollection 本身在属性更改时不会做任何事情,但如果项目本身触发了 OnPropertyChanged,那么应该会更新显示。
(我读到的一个答案建议使用提供的名为 TrulyObservableCollection 的代码,但我遇到的问题是所有内容都会刷新,而不仅仅是已更新的一项)。
请问我有什么遗漏或误解吗?
谢谢。
【问题讨论】:
-
你解释的方式没有错。您确定 Binding 不是 OneTime 吗?能否也添加 Xaml 代码?
-
我将在您的 SetProperty 函数中进行一次疯狂的飞跃,您不应该传递一个表示正在更改的实际属性的字符串吗?除非您从字段名称中获取属性名称(这将要求所有人都遵循相同的模式)。
-
@Reza - 不,绑定不是一次性的。
-
@RodrigoSilva 你走在正确的道路上。 SetProperty 确实确实从字段名称中获取了属性名称......但这不是 XAML 绑定的内容。 XAML 绑定到一个不同的属性,该属性在文本周围设置了一些格式。明确提及该名称可以解决问题。我需要更聪明地使用 XAML 并使用转换器而不是不同的属性。
标签: c# xaml gridview observablecollection