绑定到可观察列表的折线不刷新(<;点&>) [英] Polyline bound to ObservableList<Point> doesn't refresh
本文介绍了绑定到可观察列表的折线不刷新(<;点&>)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个内部有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
这篇关于绑定到可观察列表的折线不刷新(<;点&>)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文