目录
通过事件和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); }
}
本文用于交流学习,有问题可私信。