绑定到可观察列表的折线不刷新(<点&>) [英] Polyline bound to ObservableList<Point> doesn't refresh

查看:10
本文介绍了绑定到可观察列表的折线不刷新(<点&>)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个内部有ObservableCollection<Point> channel1的类(我们称它为externalClass)。(类本身不实现INotify)

在MainWindow中,我有一条多段线绑定到ThisexternalClass.channel1,它使用从ObservableCollection到PointCollection的转换器。

所以从C#I绑定DataContext = externalClass;,而在XAML中,折线看起来像:

<Polyline Points="{Binding channel1, Converter={StaticResource pointCollectionConverter}}" Stroke="#FF00E100" Name="line" />

我有一个测试函数是这样工作的:

public void test()
{
   ObservableCollection<Point> newone = new ObservableCollection<Point>();
   for (int i = 0; i < debugCh1.Count; i++)
   {
      Point p1 = debugCh1[i];
      p1.Y = p1.Y + 1;
      newone.Add(p1);
   }
   channel1= newone;
}

如果我在转换器本身中添加断点,我可以看到它在启动时被调用(并且实际上显示了初始值(硬编码)。但是当我将测试功能添加到按钮时..它不执行任何操作(未调用转换器)

您知道更改通知的停止位置吗?

解决方案

在看了答案并搜索了一下之后,我得出了答案。我想把它张贴在那里,供其他所有人使用

所以..所谓的外部类必须从INotifyPropertyChanged继承,并且必须实现NotifyPropertyChanged 所以所有的一切都必须这样声明:

public class externalClass  : INotifyPropertyChanged
{ 
  ....
    // at some point you have your ObservableCollection<smth> as a property 
    public ObservableCollection<Point> channel1 { get; set; }
  ....
    //at some point you implement NotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string caller)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(caller));
        }
    }
   ....
   //then whenever you need to fire the notification
   [..]do something with channel1
   NotifyPropertyChanged("channel1");

仅此而已。如果您添加一个适当的绑定(就像我在问题中显示的那样),整个设置就会起作用。至少我的管用了呵呵呵

祝你好运!感谢帮助我的人!!:D

推荐答案

多段线点在绑定时可能不会侦听INotifyCollectionChanged。尝试将Channel1公开为属性,并使用"Channel1"

引发INotifyPropertyChanged

这篇关于绑定到可观察列表的折线不刷新(&lt;点&>)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆