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));
});
}
}
}