gpt4 book ai didi

c# - 一个 super 简单的 MVVM-Light WP7 示例?

转载 作者:可可西里 更新时间:2023-11-01 08:44:38 25 4
gpt4 key购买 nike

我正在寻找一个示例,它以最简单的方式演示以下内容:

调用基于 SOAP 的网络服务的模型;定期轮询以获取最新值(假设 SOAP 服务返回一个 bool 值)。该模型还应该支持调用 SOAP 方法来更改服务器上的 bool 值。

一个 ViewModel,它使底层 bool 值能够绑定(bind)到 View 中的控件(例如复选框)。

上面的复选框控件绑定(bind)到底层 bool 值的 View 。根据轮询间隔,复选框将随着服务器状态的变化而更新。如果单击该复选框,事件将被分派(dispatch)到导致服务器更新的模型。

最佳情况下,此示例将在 Windows Phone 7 上运行,但在紧要关头,我会对支持 SL3 的东西感到满意(不允许使用 SL4 命令路由)。

我正在努力了解如何让 MVVM-Light 为我工作,我怀疑专家可以很快地编写出这样的示例代码……我还怀疑这对于很多人来说是一种相当普遍的模式应用。

最佳答案

Mick N 的指导有所帮助,但真正让我渡过难关的是 Jeremy Likness 的这篇帖子: http://csharperimage.jeremylikness.com/2010/04/model-view-viewmodel-mvvm-explained.html

为了其他人的利益,这里是示例(假设我没有做任何真正愚蠢的事情):

首先,我开始使用 Mvvm-Light Windows Phone 7 项目。

我在 MainPage.xaml 中添加了一个复选框:



 
                  IsChecked="{绑定(bind) Switch1.PowerState, Mode=TwoWay}"
高度="72"Horizo​​ntalAlignment="左"边距="24,233,0,0"
Name="checkBox1"VerticalAlignment="Top"Width="428"/>

请注意,IsChecked 使用 TwoWay 模式绑定(bind)到 Switch1.PowerState,以便属性双向流动。

对我来说,一个关键的学习是如何启用从将在新线程上运行的计时器回调 (TimerCB) 到 Silverlight UI 线程的通信。我使用了在 UI 线程上等待的 Mvvm-Light DispatcherHelper.CheckBeginInvokeOnUI 助手。

然后我必须决定是在我的模型中自己实现 INotifyPropertyChanged,还是使用 Mvvm-Light 的 ViewModelBase 实现。实际上,我尝试了两种方法并让它工作,但决定我更喜欢使用 ViewModelBase,因为它支持“广播”,我认为在我的实际项目中这会很方便,因为我将有多个 ViewModel。将“模型”基于 ViewModelBase 类似乎有点粗鲁,但我认为这样做没有任何害处。 (???)。

我的模型.cs如下。



public class OnOffSwitchClass : ViewModelBase//忽略它是从 ViewModelBase 派生的!
{
私有(private)常量 Int32 TIMER_INTERVAL = 5000;//5秒
私有(private)计时器_timer;

//创建时创建一个每 5 秒更改一次值的计时器
公共(public) OnOffSwitchClass()
{
_timer = new System.Threading.Timer(TimerCB, this, TIMER_INTERVAL, TIMER_INTERVAL);
}

private static void TimerCB(对象状态)
{
//在开和关之间交替
((OnOffSwitchClass)state).PowerState = !((OnOffSwitchClass)state).PowerState;
}

public const string PowerStatePropertyName = "PowerState";

私有(private) bool _myProperty = 假;

公共(public) bool PowerState
{
得到
{
返回 _myProperty;
}


{
如果(_myProperty == 值)
{
返回;
}

var oldValue = _myProperty;
_myProperty = 值;

//使用 GalaSoft.MvvmLight.Messenging 更新绑定(bind)和广播更改
GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(() =>
RaisePropertyChanged(PowerStatePropertyName, oldValue, value, true));
}
}
}

MainViewModel.cs 已修改为包含以下内容


private OnOffSwitchClass _Switch1 = new OnOffSwitchClass();



public OnOffSwitchClass 开关 1
{
得到
{
返回 _Switch1;
}
}

然后我添加了对 DispatcherHelper.Initialize() 的调用;在我的 App() 构造函数中。

这样看起来对吗?

关于c# - 一个 super 简单的 MVVM-Light WP7 示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com