首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >关于WPF上MVVM模式的问题?

关于WPF上MVVM模式的问题?
EN

Stack Overflow用户
提问于 2010-03-10 18:57:27
回答 2查看 471关注 0票数 1

我有一个用户控件,比如说UC1。此用户控件具有视图模型UC1_vm.

在用户控件UC1中,我有一个画布,其中实现了绘制曲线逻辑。此绘制曲线逻辑基于视图模型( UC1_vm)中的数据点属性。

视图模型中的数据点属性随条件的不同而变化。数据点的生成是在视图模型中编写的。

我希望将视图模型中的数据点属性绑定到用户控件(视图)内的绘制曲线逻辑。我希望每当在视图模型中更改数据点属性时,画布调用绘图曲线方法。

我可以设置画布的set any属性吗?当更改它时,它会自动调用on画图逻辑?

请建议我实施这个方案的方法!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-13 08:20:58

听起来,您有一个DependencyProperty,它是UserControl中点数的集合。注册它时,使用FrameworkPropertyMetadata元数据,并在元数据构造函数中指定FrameworkPropertyMetadataOptions.AffectsRender。请注意,只有当整个集合被替换时(如果为集合引发PropertyChanged,但集合实例没有更改,则仍然不会调用画图),这才能工作。

如果您的集合实现了INotifyCollectionChanged,那么您可以连接一个集合更改的事件处理程序,该处理程序会使可视的:

代码语言:javascript
运行
AI代码解释
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2010-03-10 19:32:47

编辑__:谢谢@Ray的一个相当有效的观点!

如果您的列表实现了INotifyCollectionChanged接口(例如,ObservableCollection<Point>,参见ObservableCollection@msdn)或实现INotifyPropertyChanged的对象(参见INotifyPropertyChanged @msdn),并且您要将这些点绑定到视图,那么它应该自己排序(当然,只要绑定是正确的!)

我提到这一点,因为您表示您使用的是一个列表,它取决于设置的方式,可能只工作一次,但从不更新。

您能用示例代码更新这个问题吗,例如类/WPF标记/视图模型代码等等,以获得更多的指导。在这个空间里有很大的移动空间。

PK :-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2422219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档