据我了解,使用MVVM/MVVMLight的好处之一是将 View 与模型分开,因此,建议使用诸如MVVMLight之类的库,这很明显,事实上,我正在使用MVVMLight来帮助将多个页面放在一起的机制,但是我不完全了解的是,一旦您的页面(ViewModels和XAML文件)彼此对话,MVVMLight的其他部分会很有用。
例如,以下两个选项以相同的方式工作,除了在选项2中,我使用的是MVVMLight
,但我不完全了解MVVMLight带来的好处。
通过使用2
选项而不是1
我可以获得什么?
有人可以给我几个例子,说明XAML文件与ViewModels对话后MVVMLight如何提供帮助吗?
选项1
XAML
<Button Content="Button" Command="{Binding FindPdfFileCommand}"/>
ViewModel .cs
namespace Tool.ViewModel
{
public class FindrViewModel : ViewModelBase
{
public ICommand FindPdfFileCommand{get;private set;}
public FindrViewModel(){ FindPdfFileCommand = new RelayCommand(() => FindPdfFile_Click());}
private void FindPdfFile_Click()
{
Console.WriteLine("Button clicked");
}
}
}
选项2
XAML
xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
xmlns:Custom="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<Button x:Name="button" Content="Button">
<Custom:Interaction.Triggers>
<Custom:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand x:Name="ClickMeEvent" Command="{Binding FindPdfFileCommand, Mode=OneWay}" />
</Custom:EventTrigger>
</Custom:Interaction.Triggers>
</Button>
ViewModel .cs
namespace Tool.ViewModel
{
public class FindrViewModel : ViewModelBase
{
public ICommand FindPdfFileCommand{get;private set;}
public FindrViewModel(){ FindPdfFileCommand = new RelayCommand(() => FindPdfFile_Click());}
private void FindPdfFile_Click()
{
Console.WriteLine("Button clicked");
}
}
}
最佳答案
这就是模式本身的目的。 MVVM只是一种设计模式。如果需要,您可以自己实现它,而无需使用任何第三方库,例如MvvmLight
或Prism
。
使用库的主要好处是,它为您提供了开箱即用开发MVVM应用程序所需的大多数功能。例如,这包括一个基类,该基类引发INotifyPropertyChanged
接口(interface)的实现,并引发变更通知,以及ICommand
接口(interface)的实现。
在您的示例中,您正在使用ViewModelBase
和RelayCommand
类。如果您不使用MvvmLight
,则必须自己实现这些。EventToCommand
在这种情况下并不是真正有用。它主要用于要将事件的EventArgs
作为命令参数传递给命令:http://blog.galasoft.ch/posts/2014/01/using-the-eventargsconverter-in-mvvm-light-and-why-is-there-no-eventtocommand-in-the-windows-8-1-version/的情况。
您也可以直接在此处绑定(bind)到command属性:
Command="{Binding FindPdfFileCommand}"/>
但是您仍然在 View 模型中使用
MvvmLight
类型。关于c# - 使XAML文件与ViewModel对话后,MVVMLight在其他哪些方面有所帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47006677/