当前位置: 首页 > 知识库问答 >
问题:

数据模型依赖于另一个数据模型的属性时的数据绑定

张鸿宝
2023-03-14

我有节点(屏幕上的矩形)以及链接(矩形之间的箭头)。

在数据方面,节点和链路都有各自的数据属性。但是一个链路的坐标等于它的两个组成节点的坐标;即。

  • link.x1=节点1.x
  • link.y1=节点1.y
  • link.x2=节点2.x
  • Link.y2=Node2.y

理想情况下,每当节点的位置改变时,其所有输入和输出链路的位置也应随之改变。

他们是一个简单的方法(除了下面的)来完成这件事吗?

我的意思是,最终我所需要的只是类似LinkInstance.x1=NodeInstance1.x之类的东西。当然,我可能做错了。如果是的话,请对我大喊大叫。

class Link : ReactiveBase
{
    private int x1;
    private int y1;
    private int x2;
    private int y2;

    private Node fromNode;
    private Node toNode;

    //Just copies value, no updates.
    public int X1 { get {return this.fromNode.X;} }
    public int Y1 { get {return this.fromNode.Y;} }
    public int X2 { get {return this.toNode.X;} }
    public int Y2 { get {return this.toNode.Y;} }

    //Binding to From.X in xaml works; but don't like accessing node from  link
    public Node From { get { return this.fromNode; } }
    //...

    public Link(Node from, Node to)
    {
        this.fromNode = from;
        this.toNode = to;

        //works; but quite a lot of work
        from.PropertyChanged += test;
        //...
    }

    private void test(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "X")
        {
            this.NotifyPropertyChanged("X1");
        }
        else if (e.PropertyName == "Y")
        {
            this.NotifyPropertyChanged("Y1");
        }
    }
    //...
}

共有1个答案

束帅
2023-03-14

我认为这是一个更简单的解决方案:

class Node: ViewModelBase
{    
    private int _X;
    public int X
    {
        get => _X;
        set
        {
            _X = value;
            OnPropertyChanged(new PropertyChangedEventArgs(nameof(X)));
        }
    }

    private int _Y;
    public int Y
    {
        get => _Y;
        set
        {
            _Y = value;
            OnPropertyChanged(new PropertyChangedEventArgs(nameof(Y)));
        }
    }
}

class Link: ViewModelBase
{
    public Link(Node from, Node to)
    {
        FromNode = from;
        ToNode = to;
    }
    
    private Node _FromNode;
    public Node FromNode
    {
        get => _FromNode;
        set
        {
            _FromNode = value;
            OnPropertyChanged(new PropertyChangedEventArgs(nameof(FromNode)));
        }
    }
    private Node _ToNode;
    public Node ToNode
    {
        get => _ToNode;
        set
        {
            _ToNode = value;
            OnPropertyChanged(new PropertyChangedEventArgs(nameof(ToNode)));
        }
    }
}

其中ViewModelBase是实现InotifyPropertyChanged接口的基类。您的链接可以保存一组节点的坐标,而不是保存对节点本身的引用,这样您就不需要处理xy属性更新,因为它们是由节点本身处理的。

 类似资料:
  • 一、概述 在诸葛io中,区别于传统的基于pv、uv等指标的数据统计方法,采用“事件模型”来描述用户在产品上的各种行为。 事件模型又包括了事件和用户(identify)两个实体,您可以根据自己的需求通过接口上传相对应的数据,然后在诸葛io中的各个分析模块多维交叉完成指标查询。同时我们还引进了会话(session)的概念,会话是指用户再一次产品使用中,从开始到结束的过程,用户在互动的过程中会发生一次或

  • 数据模型用于存放,通过页面、JSON 等途径解析出来的数据。 可以在模型属性上使用注解,将数据解析到属性上。 支持模型嵌套、属性数组。 继承 Yurun\Crawler\Module\DataModel\Contract\BaseDataModel 类。 示例 ArticleListItemModel.php: <?php namespace Yurun\CrawlerApp\Module\Yur

  • 放置位置 所有的数据模型文件,都 必须 存放在:app/Models/ 文件夹中。 命名空间: namespace App\Models; User.php Laravel 5.1 默认安装会把 User 模型存放在 app/User.php,必须 移动到 app/Models 文件夹中,并修改命名空间声明为 App/Models,同上。 为了不破坏原有的逻辑点,必须 全局搜索 App/User

  • Open-Falcon,采用和OpenTSDB相似的数据格式:metric、endpoint加多组key value tags,举两个例子: { metric: load.1min, endpoint: open-falcon-host, tags: srv=falcon,idc=aws-sgp,group=az1, value: 1.5, timestam

  • 在 HBase 中,数据存储在由行列构成的二维表中。这是与一个关系数据库(RDBMS)重叠的术语,但这不是一个有用的类比。相反,将 HBase 表视为多维映射会很有帮助。 HBase 数据模型术语 表 HBase 表由多行组成。 行 HBase 中的一行由一个行键和一个或多个具有与之关联的值的列组成。在行存储时,顺序按照字母进行排序。因此,行键的设计非常重要。其目标是以相关行彼此靠近的方式存储数据

  • Section Contents 基本内容 标量 容器 方法 指令 结点变量 对象包装 这只是一个介绍性的说明,可以查看 FreeMarker Java API文档 获取更多信息。

  • 正如已经看到的,数据模型的基本结构是树状的。 这棵树可以很复杂,并且可以有很大的深度,比如: (root) | +- animals | | | +- mouse | | | | | +- size = "small" | | | | | +- price = 50 | | | +- elephan

  • javafx属性是将数据模型连接到javafx gui的好方法,因为它们的绑定模型实现了强大的通知更新机制。 属性和绑定并不严格地与GUI相关,而是对JavaBeans的扩展。 因此,我们希望在应用程序模型类中使用它们,而不引入对包的依赖关系,并且通常来自. 换句话说:(update) 我可能需要将应用程序分成两个模块。 一个模块应该只包含操作数据的类(模型类,说MVC)。 第二个模块将包含所有图