标签: mvvm-light

为什么MVVM Light中没有PropertyChanged的简写

每当我们在setter中调用PropertyChanged时MVVM Light中没有简写,就像在flex [Bindable]中一样:

[PropertyChanged]
public bool IsEditable { .... }
Run Code Online (Sandbox Code Playgroud)

为什么我们每次都要写PropertyChanged("IsEditable"),它容易出错,哪些可以默认.

.net mvvm mvvm-light

0
推荐指数
2
解决办法
1814
查看次数

为什么MvvmLight.Command _and_ MvvmLight.Extras.WP7都需要?

我有(注意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:cmdxtrasxmlns:cmd.如果我只有一个或另一个,事情就不起作用了!

这看起来很笨拙,并没有与我认为别人的建议相提并论.为什么我需要两者?

silverlight xaml windows-phone-7 mvvm-light

0
推荐指数
1
解决办法
2208
查看次数

ViewModel 作为 ViewModel 的成员

我一直在使用 MVVM Light Toolkit 来帮助学习 MVVM 模式。但是,我一直无法解决控件场景中的用户控件问题。

例如,在时间表应用程序中,假设我们有一个名为 NewUnitOfWork 的控件。首次加载时,带有项目列表的 ListBox 的面板将作为 NewUnitOfWork 的内容加载。用户点击一个。一个新面板与一个包含该项目可能任务的 ListBox 交换。选择一个任务并加载一个新面板,该面板将包含用于为所选项目的所选任务输入数据的控件。

因此,我们将一个用户控件中的选定项目传递给其他两个用户控件,这些用户控件又作为 NewUnitOfWork 控件(或窗口)的内容交换。

如果每个控件都有自己的 ViewModel,我们需要将选定的值从一个 ViewModel 传递到下一个等等。

我使用全局变量(通过“服务”)让它在单用户情况下工作。但是,它存在并发问题,这不是一个好的解决方案。这是低于标准的。

我在这个论坛上多次看到建议将 ViewModel 作为另一个 ViewModel 的成员。虽然这解决了手头的问题,但我认为这违反了 MVVM 模式。另一个 ViewModel 不是 ViewModel 应该直接拥有的 UI 相关功能。

所以。有没有人找到一种干净的符合 MVVM 的方法来做这种事情?

干杯

mvvm mvvm-light

0
推荐指数
1
解决办法
3107
查看次数

winrt应用程序框架

开发Windows应用商店应用程序的更好框架是什么?

我使用过http://metroprism.codeplex.com/但现在我想将Caliburn.Micro或MVVM灯用于另一个项目.

我已经查看了这些框架的几个应用程序示例,但它们并不复杂,我无法估计更大项目的使用情况.

这两个是完整的文档,但我认为问题是winrt的文档混合了WP7,Silverlight和WPF,我对支持所有使用Windows Store应用程序的功能和做法表示怀疑.

你能给我一些建议吗?或者,如果在WPF和Silverlight的Prism中使用模块化支持,Winrt的开发实践是什么?谢谢.

mvvm-light caliburn.micro windows-runtime

0
推荐指数
1
解决办法
403
查看次数

MVVM Light 程序集与 Microsoft.Practices.ServiceLocation 冲突

我遇到一个问题,即无法使用 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 的问题在于该程序集有两个具有相同版本的引用(但请注意不同的公钥标记)。

我创建了一个非常简单的重现,如下所示:

  1. 创建一个新的 WPF 应用程序
  2. 添加Nuget包MVVM Light
  3. 添加Nuget包Unity(还添加名为CommonServiceLocator的依赖包)
  4. 构建并发布 WPF 应用程序
  5. 尝试并安装已发布的 MyApp.application clickOnce 包....收到上面详细说明的错误 …

mvvm-light

0
推荐指数
1
解决办法
3934
查看次数