- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在寻找一个示例,它以最简单的方式演示以下内容:
调用基于 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"HorizontalAlignment="左"边距="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/
我需要为我正在处理的应用程序使用 Surface 项目模板,但我也想使用 MVVM Light Toolkit。我发现我可以“添加 | 新项目...”并为 View 、 View 模型或定位器选择一个
我正在使用MVVM Light,并且正在使用消息在ViewModel之间进行通信,以使ViewModel知道何时可以执行某些操作。我的问题是我注册了一条消息,然后多次收到它。因此,要使我的程序不止执行
我目前正在自学MVVM模式。 我第一次碰到了消息传递的概念。 我知道消息传递包含在mvvm-light工具包中。但是我找不到任何地方的用法示例(下载中未提供示例项目)。 如果有人可以指导我了解有关如何
使用Nuget安装MVVM Light Toolkit时,似乎没有安装MVVM Light的片段。 我在哪里可以找到它们? 最佳答案 片段可在 GitHub 上找到. 下载代码(右上角克隆或下载按钮)
我遇到了一个问题,即在 VS 或 Blend 中运行解决方案时,属性 IsInDesignMode 没有返回 true 的预期值。我的环境包括 Win Server 2008 R2、VS2010 Pr
如果我将消息从 ViewModelA 发送到 ViewModelB,是否有办法从我的单元测试中捕获此通知,该单元测试正在测试引发消息的 ViewModelA? Messenger.Default.Se
我尝试使用提供的示例 petstore openapi.json 生成项目。我用过light-codegen生成端点和模型。 我确实安装了 light-codegen: git clone https
这段代码告诉计算机做什么?附注“灯”是一个 boolean 数组。 for (int k = 1; k < lights.length; k++) lights[k]
我有一个包含几个对象和一些对象的场景,在这些情况下,我希望球体受到粉红色和蓝色灯光的影响。但我也有一个管几何结构,它应该只受白光影响,而不受粉红色和蓝色光的影响。 有关问题的演示,请参见下图:现在发生
我正在考虑开始使用 MVVM Light,并且遇到了"new"ICleanup 界面。我只是想知道你什么时候清理虚拟机......当你离开页面时? 另外,我看到 ViewModelLocator 中有
我有一个带有关联虚拟机的子窗口,每次我要求打开子窗口时都会创建该虚拟机。当子窗口打开时,它会为 MVVM Light 消息注册一个监听器。关闭窗口后,我很确定我正在释放对它的所有引用,但我实际上并没有
是否有 MVVM Light DispatcherHelper 可用于 PCL 的时间表?官博中只有备注,暂时不可用。 最佳答案 我刚刚添加了一个 nuget 包,它可以帮助您从 MvvmLight
我正在尝试按照此博客文章中的示例使用 MVVM Light 框架来实现 Metro 风格的分组项目页面,但使用 ViewModelLocator 来提供可混合性: http://mikaelkoski
我们有一个使用 MVVM Light 的 WP8 应用程序,它运行良好。但是,现在我们要使用 Xamarin 来定位 iOS。看来 MvvmCross 是更好的跨平台开发框架。 有没有人有改变这样的框
刚刚注意到 4.2.30 版本不包括 protected bool Set( ref T field, T newValue,
我已经开始使用最新的 MVVM Light 工具包 v4(NuGet 预览版 v4.1.21,DLL v:4.0.21.25725),它实现了 SimpleIOC 模式。 在我的 ViewModelL
我可以使用 Interaction.Triggers 捕获文本框上的 textchanged 事件,如下所示:
我希望这不是一个太愚蠢的问题:我刚刚开始使用 MVVM light(到目前为止很喜欢它!)。在“之前”(即使用 MVVML 之前),我必须通过 ui 分派(dispatch)任何会命中引发 INoti
我在 list 中使用了以下行: android:theme="@android:style/Theme.Light.NoTitleBar" 没有标题栏并在我的应用程序中显示精简版的 AlertDia
“ChainLight”类在其构造函数中有一个名为“rayDirection”的参数: ChainLight(rayHandler, rays, Color, distance, rayDirecti
我是一名优秀的程序员,十分优秀!