老猿WPF之 通知更新+事件实现低耦合数据传递

目录

优点:

事例代码:

View:

ViewModel

Service     

    


        通过事件和WPF通知更新实现数据 传递:

优点:

1,松散耦合

2,占用资源低

3,效率高

4,代码量低

事例代码:

View:

 在视图中关联数据 上下文,实体属性可以直接binding到控件属性上。(View中关联数据上下文可以参考之前的文章。)

<StackPanel>
            <TextBlock Text="{Binding TE.Id}" Background="Gray" Width="200 " Height="30" Margin="10"/>
            <TextBlock Text="{Binding TE.IsEnabled}" Background="Gray" Width="200 " Height="30" Margin="10"/>
            <TextBlock Text="{Binding TE.Price}" Background="Gray" Width="200 " Height="30" Margin="10"/>
            <TextBlock Text="{Binding TE.Name}" Background="Gray" Width="200 " Height="30" Margin="10"/>
            <TextBlock Margin="10" Text="sdfasdf" Width="200 " Height="30" Background="Gray"/>
        </StackPanel>

ViewModel

本文MainViewModel继承了 ObservableObject。(引用:Microsoft CommunityToollit.Mvvm)

1,新建一个接收实体对象,并在发生改变时通知更新。

2,调用Service中的事件,并将事件传递过来的实体对象赋值给第一步建立的接收实体对象。

        注意:事件委托的方法内容不要进行太多逻辑否则影响性能。

 public  class MainViewModel:ObservableObject
    {
        private TestEntity _TE;

        public TestEntity TE
        {
            get { return _TE; }
            set { _TE = value; OnPropertyChanged(); }
        }

        public MainViewModel()
        {
            Service service = new Service();
            service.ReceiveRealtimeData += OnSecondPropertyChanged;
        }

        private void OnSecondPropertyChanged(object? sender, TestEntity e)
        {
            TE = e;
        }

    }

Service     

1,创建一个事件

2,创建一个实体对象,作为触发事件的传递对象。并在发生改变时触发事件。

3,private TestEntity GenerateRealtimeData()为创建实体对象数据 方法。

private TestEntity GenerateRealtimeData()
        {
            // 生成实时数据实体的代码
            Random random = new Random();
            double value = random.NextDouble() * 100;
            int dId = random.Next();
            TE= new TestEntity { Id = dId, IsEnabled = true, Name = "name", Price = value };
            return TE;
        }

      

        public event EventHandler<TestEntity> ReceiveRealtimeData;



        private TestEntity _te;

        public TestEntity TE
        {
            get { return _te; }
            set { _te = value; ReceiveRealtimeData.Invoke(this,_te); }
        }

    

本文用于交流学习,有问题可私信。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值