每当我们在setter中调用PropertyChanged时MVVM Light中没有简写,就像在flex [Bindable]中一样:
[PropertyChanged]
public bool IsEditable { .... }
Run Code Online (Sandbox Code Playgroud)
为什么我们每次都要写PropertyChanged("IsEditable"),它容易出错,哪些可以默认.
我有(注意Extras.WP7):
<phone:PhoneApplicationPage
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7"
>
Run Code Online (Sandbox Code Playgroud)
...它对我的EventToCommand工作正常,如下所示:
<phone:PhoneApplicationPage.Resources>
<i:EventTrigger x:Key="KeyPadButtonTrigger" EventName="Click">
<cmd:EventToCommand Command="{Binding Path=KeyPadButtonCommand}" CommandParameter="{Binding ElementName=Self, Path=Content }" />
</i:EventTrigger>
</phone:PhoneApplicationPage.Resources>
Run Code Online (Sandbox Code Playgroud)
但后来我想用MmvmLight ButtonBaseExtensions这样:
<Button x:Name="button1"
cmd:ButtonBaseExtensions.Command="{Binding KeyPadButtonCommand}"
cmd:ButtonBaseExtensions.CommandParameter="{Binding ElementName=button1, Path=Content }"/>
Run Code Online (Sandbox Code Playgroud)
......但是当我这样做时,我得到了"The attachable property 'Command' was not found in type 'ButtonBaseExtensions'"错误.
我发现我必须添加一个名称空间assembly=GalaSoft.MvvmLight.WP7,如下所示:
<phone:PhoneApplicationPage
xmlns:cmdxtras="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.WP7"
>
Run Code Online (Sandbox Code Playgroud)
请注意,我有两个xmlns:cmdxtras和xmlns:cmd.如果我只有一个或另一个,事情就不起作用了!
这看起来很笨拙,并没有与我认为别人的建议相提并论.为什么我需要两者?
我一直在使用 MVVM Light Toolkit 来帮助学习 MVVM 模式。但是,我一直无法解决控件场景中的用户控件问题。
例如,在时间表应用程序中,假设我们有一个名为 NewUnitOfWork 的控件。首次加载时,带有项目列表的 ListBox 的面板将作为 NewUnitOfWork 的内容加载。用户点击一个。一个新面板与一个包含该项目可能任务的 ListBox 交换。选择一个任务并加载一个新面板,该面板将包含用于为所选项目的所选任务输入数据的控件。
因此,我们将一个用户控件中的选定项目传递给其他两个用户控件,这些用户控件又作为 NewUnitOfWork 控件(或窗口)的内容交换。
如果每个控件都有自己的 ViewModel,我们需要将选定的值从一个 ViewModel 传递到下一个等等。
我使用全局变量(通过“服务”)让它在单用户情况下工作。但是,它存在并发问题,这不是一个好的解决方案。这是低于标准的。
我在这个论坛上多次看到建议将 ViewModel 作为另一个 ViewModel 的成员。虽然这解决了手头的问题,但我认为这违反了 MVVM 模式。另一个 ViewModel 不是 ViewModel 应该直接拥有的 UI 相关功能。
所以。有没有人找到一种干净的符合 MVVM 的方法来做这种事情?
干杯
开发Windows应用商店应用程序的更好框架是什么?
我使用过http://metroprism.codeplex.com/但现在我想将Caliburn.Micro或MVVM灯用于另一个项目.
我已经查看了这些框架的几个应用程序示例,但它们并不复杂,我无法估计更大项目的使用情况.
这两个是完整的文档,但我认为问题是winrt的文档混合了WP7,Silverlight和WPF,我对支持所有使用Windows Store应用程序的功能和做法表示怀疑.
你能给我一些建议吗?或者,如果在WPF和Silverlight的Prism中使用模块化支持,Winrt的开发实践是什么?谢谢.
我遇到一个问题,即无法使用 ClickOnce 发布我的 WPF 应用程序。
该应用程序使用 Nuget 包 MVVM Light 4.1.26.1、Unity 2.1.505.2、CommonServiceLocator 1.0。
问题是,当我发布时,一切都构建得很好,但是当我尝试安装 clickonce 包时出现此错误:
无法安装或运行该应用程序。该应用程序要求首先将程序集 Microsoft.Practices.ServiceLocation 版本 1.0.0.0 安装到全局程序集缓存 (GAC) 中。
我做了一些挖掘,发现清单中有两个对该程序集的引用,其中一个被标记为我无法摆脱的先决条件:
<dependency>
<dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" version="1.0.0.0" publicKeyToken="59D6D24383174AC4" language="neutral" processorArchitecture="msil" />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Microsoft.Practices.ServiceLocation.dll" size="29760">
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" version="1.0.0.0" publicKeyToken="31BF3856AD364E35" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>eee+a+dQmhpSY/ApLxRipXdEp8UsTaZHXHClBU0Iwyc=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我非常确定 ClickOnce 的问题在于该程序集有两个具有相同版本的引用(但请注意不同的公钥标记)。
我创建了一个非常简单的重现,如下所示: