WPF的MVVM中使用ObservableCollection无法更新listview中的数据怎么回事?急

vm层主要代码:pravite_displayData;publicObservableCollection<CompareDiplayData>DisplayData{... vm层主要代码:
pravite _displayData;
public ObservableCollection<CompareDiplayData> DisplayData
{
get { return _displayData; }
}
_displayData中的数据会变化
m层
public class CompareDiplayData : INotifyPropertyChanged
{
private string _key;
public string Key
{
set
{
_key = value;
this.Changed("Key");
}
get
{
return _key;
}
}
private string _projectData;
public string ProjectData
{
set
{
_projectData = value;
this.Changed("ProjectData");
}
get
{
return _projectData;
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void Changed(string PropertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
v层:
<ListView HorizontalAlignment="Left" Name="comparelistview" VerticalAlignment="Top" Width="600" Height="340" ItemsSource="{Binding DisplayData}">
<ListView.View>
<GridView>
<GridViewColumn Width="150" Header="Key"
DisplayMemberBinding="{Binding Path=Key}" />
<GridViewColumn Width="150" Header="Project Data"
DisplayMemberBinding="{Binding Path=ProjectData}" />
</GridView>
</ListView.View>
</ListView>
不知道到为什么数据就是显示不了。
展开
 我来答
阳光的雷咩咩
推荐于2016-11-14 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7569万
展开全部

由于DisplayData是一个对象,是引用类型,也就是一个地址,除非你在后台设置DisplayData=null,再赋值为新对象,否则前台检测不到它的item有任何变化。

要实现DisplayData的各个属性变化通知前台,需要添加类似如下的代码,

        void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            if (e.NewItems != null && e.NewItems.Count != 0)
                foreach (PACViewModel pVM in e.NewItems)
                    pVM.PropertyChanged += this.OnPACViewModelPropertyChanged;

            if (e.OldItems != null && e.OldItems.Count != 0)
                foreach (PACViewModel pVM in e.OldItems)
                    pVM.PropertyChanged -= this.OnPACViewModelPropertyChanged;
        }

也就是说你要通过手工的代码实现DisplayData的成员的变化绑定到整个对象的变化上面。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式