我有一个用户控制让说UC1。 这个用户控件具有视图模型UC1_vm。
在用户控件UC1我具有其中绘制曲线逻辑被实现的画布。 该图中曲线逻辑是基于视图模型(UC1_vm)数据点属性。
数据点用不同的条件视图模型改变内部属性。 数据点的产生是写在视图模型。
我想数据点属性绑定在视图模型的用户控制(视图)内的拉伸曲线的逻辑。 我想只要数据点属性在视图模型改变,画布调用画曲线的方法。
我可以设置设置哪些改变时,它调用油漆逻辑自动matically帆布的任何财产?
请给我建议实施此方案的方法!
我有一个用户控制让说UC1。 这个用户控件具有视图模型UC1_vm。
在用户控件UC1我具有其中绘制曲线逻辑被实现的画布。 该图中曲线逻辑是基于视图模型(UC1_vm)数据点属性。
数据点用不同的条件视图模型改变内部属性。 数据点的产生是写在视图模型。
我想数据点属性绑定在视图模型的用户控制(视图)内的拉伸曲线的逻辑。 我想只要数据点属性在视图模型改变,画布调用画曲线的方法。
我可以设置设置哪些改变时,它调用油漆逻辑自动matically帆布的任何财产?
请给我建议实施此方案的方法!
这听起来像你有一个DependencyProperty是点的集合中的用户控件。 当你注册,使用FrameworkPropertyMetadata
元数据,并指定FrameworkPropertyMetadataOptions.AffectsRender
在元数据构造。 请注意,如果整个集合被替换,这只会工作(如果你提出的PropertyChanged收集,但集合实例并没有改变,你的油漆仍然不会被调用)。
如果您的集合实现INotifyCollectionChanged
,那么你就可以将一个集合改变事件处理程序,无效的视觉:
public static DependencyProperty PointsProperty = DependencyProperty.Register(
"Points",
typeof(IEnumerable<Point>),
typeof(UC1),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender,
OnPointsChanged));
public IEnumerable<Point> Points
{
get { return (IEnumerable<Point>)GetValue(PointsProperty); }
set { SetValue(PointsProperty, value); }
}
private static void OnPointsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
UC1 ctrl = d as UC1;
if (e.NewValue != null && e.NewValue is INotifyCollectionChanged)
((INotifyCollectionChanged)e.NewValue).CollectionChanged += ctrl.PointsChanged;
if (e.OldValue != null && e.OldValue is INotifyCollectionChanged)
((INotifyCollectionChanged)e.OldValue).CollectionChanged -= ctrl.PointsChanged;
}
private void PointsChanged(object sender, NotifyCollectionChangedEventArgs e)
{
InvalidateVisual();
}
编辑 :感谢@Ray伯恩斯一个相当有效的点!
如果您的列表实现了INotifyCollectionChanged
接口(例如ObservableCollection<Point>
,看到的ObservableCollection @ MSDN )或对象实现INotifyPropertyChanged
(见INotifyPropertyChanged的@msdn )和你结合点到视图,那么它应该只要自行解决(如结合是正确的,当然!)
我提到,你曾表示你正在使用,要看事情是如何建立可使用一次,但从来没有更新列表。
你可以更新示例代码,例如类/ WPF标记/视图模型代码等问题,以获得更多的指导。 有一个很大的空间在这个空间中移动...
PK :-)