据我了解,使用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只是一种设计模式。如果需要,您可以自己实现它,而无需使用任何第三方库,例如MvvmLightPrism

使用库的主要好处是,它为您提供了开箱即用开发MVVM应用程序所需的大多数功能。例如,这包括一个基类,该基类引发INotifyPropertyChanged接口(interface)的实现,并引发变更通知,以及ICommand接口(interface)的实现。

在您的示例中,您正在使用ViewModelBaseRelayCommand类。如果您不使用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/

10-11 21:36