WPF 中的 经典的ModelView 通知页面更新 UI
view model
------------------------------------------------------------------------------
using HPControls.Helper;
using System;
using System.ComponentModel;
using System.Threading;
using Xiaowei.Models;
using Xiaowei.Services;
using Xiaowei.Settings;
namespace Xiaowei.ViewModels
{
public class MuteViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public bool IsMuted
{
get { return LocalSettings.IsMuted; }
set
{
if(LocalSettings.IsMuted != value)
{
LocalSettings.IsMuted = value;
Property.Raise(this, PropertyChanged, "IsMuted");
}
}
}
public void Toggle()
{
_ = HPMetrics.Metrics.Track(LocalSettings.CustomerId, (int)HPMetrics.XwEventType.ClickButton,"MuteButton");
IsMuted = !IsMuted;
_ = ApplicationModel.Current.ToggleMute(IsMuted);
if(IsMuted)
{
StateManager.SetAttachState(StateManager.AttachStateEnum.micOff);
}
else
{
StateManager.RemoveAttachState(StateManager.AttachStateEnum.micOff);
}
}
public static MuteViewModel Get() => LazyInstance.Value;
private MuteViewModel()
{
Property.Raise(this, PropertyChanged, "IsMuted");
if (IsMuted)
{
StateManager.SetAttachState(StateManager.AttachStateEnum.micOff);
}
else
{
StateManager.RemoveAttachState(StateManager.AttachStateEnum.micOff);
}
}
private static readonly Lazy<MuteViewModel> LazyInstance = new Lazy<MuteViewModel>(()=>
{
return new MuteViewModel();
}, LazyThreadSafetyMode.ExecutionAndPublication);
}
}
Property 类
------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Core;
namespace HPControls.Helper
{
public static class Property
{
public static void Raise(object sender, PropertyChangedEventHandler handler, string property)
{
Run.Invoke(CoreApplication.MainView.CoreWindow.Dispatcher, () =>
{
handler?.Invoke(sender, new PropertyChangedEventArgs(property));
});
}
}
}
WPF 中的 经典的ModelView 通知页面更新 UI的更多相关文章
- Winform中使用Reactivex代替BeginInvoke/Invoke来更新UI数据
首先通过Nuget安装包System.Reactive. ReactiveX项目 Url: https://github.com/Reactive-Extensions/Rx.NET public p ...
- WPF 中双向绑定通知机制之ObservableCollection使用
msdn中 ObservableCollection<T> 类 表示一个动态数据集合,在添加项.移除项或刷新整个列表时,此集合将提供通知. 在许多情况下,所使用的数据是对象的集合 ...
- 在WPF中嵌入WebBrowser可视化页面
无论是哪种C/S技术,涉及数据可视化就非常的累赘了,当然大神也一定有,只不过面向大多数人,还是通过网页来实现,有的时候不想把这两个功能分开,一般会是客户的原因,所以我们打算在WPF中嵌入WebBrow ...
- WPF中的数据绑定!!!
引用自:https://msdn.microsoft.com/zh-cn/magazine/cc163299.aspx 数据点: WPF 中的数据绑定 数据点 WPF 中的数据绑定 John Pap ...
- WPF中的事件列表 .
以下是WPF中的常见事件汇总表(按字母排序),翻译不见得准确,但希望对你有用. 事件 描述 Annotation.AnchorChanged 新增.移除或修改 Anchor 元素时发生. Annota ...
- MVVM模式和在WPF中的实现(二)数据绑定
MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- 【WPF】WPF中的List<T>和ObservableCollection<T>
在WPF中 控件绑定数据源时,数据源建议采用 ObservableCollection<T>集合 ObservableCollection<T> 类:表示一个动态数据集合,在添 ...
- 支付宝通知页面notify_url、返回页面return_url
返回页面(return_url文件)工作原理 即:商户系统请求/支付宝响应交互模式 1. 构造请求数据 商户通过提供的接口代码示例,通过代码示例的规则,程序构造与运算得到sign加密结果以及构造后的 ...
- WPF中的动画——(三)时间线(TimeLine)
WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...
随机推荐
- win10实现倒计时锁屏,休眠
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION SET /a s=10+1FOR /l %%i in (1,1,!s!) do ( SET /a s-=1 ...
- 创建Rdemo项目
1.创建项目工作目录 mkdir /home/sesa464509/R/demo cd /home/sesa464509/R/demo vi sayHello.R ------------------ ...
- php使用curl模拟post请求
废话不多说,直接上代码,做个笔记. $url="http://localhost/header_server.php"; $body = array("mobile&qu ...
- 九九乘法表(Java版)
3.九九乘法表 //九九乘法表 public class MultiplicationTables { public static void main(String[] args){ for (int ...
- maven 工程构建 之_____<dependencyManagement>标签
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- 解决iOS上网页滑动不流畅问题
body { overflow:auto; /* 用于 android4+,或其他设备 */ -webkit-overflow-scrolling:touch; /* 用于 ios5+ */ }说明: ...
- xss常见方式
1.<script>alert(1)</script> 2.源码第一个,[<]被转义,因此在第二个里 "><script>alert(1)&l ...
- vue中this.$router.push()路由传值和获取的两种常见方法
1.路由传值 this.$router.push() (1) 路由跳转使用router.push()方法,这个方法会向history栈添加一个新纪录,所以,当用户点击浏览器后退按钮时,会回到之前的 ...
- Centos忘记密码怎么修改
使用Centos系统忘记密码 在我们日常使用Centos系统时,有些人不免会出现一个共同的问题:忘记登录密码! 我们总不能再重装一遍吧! 接下来我们就分两种情况来看看: Centos系统在云服务器 C ...
- 一张图带你搞懂Javascript原型链关系
在某天,我听了一个老师的公开课,一张图搞懂了原型链. 老师花两天时间理解.整理的,他讲了两个小时我们当时就听懂了. 今天我把他整理出来,分享给大家.也让我自己巩固加深一下. 就是这张图: 为了更好的图 ...