BindableBase 是 Observable 项目从 MVVMLight 的正确转换吗?
Is BindableBase the correct conversion of Observable project from MVVMLight?
我正在将在 Gala MVVMLight
中实现的项目转换为 Prism
。其中一个模型继承自 MVVMLight 中的 ObservableObject。这是在 Prism 中转换此模型的正确方法吗?
public class SampleClass : ObservableObject
到
public class SampleClass : BindableBase
像这样转换 属性 个设置器。
public bool IsActive
{
get { return isActive; }
set { Set(ref isActive, value); }
}
到
public bool IsActive
{
get { return isActive; }
set { SetProperty(ref isActive, value); }
}
底数 class 是什么并不重要。没有明确要求您的 ViewModel 继承自 BindableBase 以使 Prism 正常工作。我有几个项目使用 Prism 作为导航和 DependencyInjection,但使用从 James Montemagno 的 MvvmHelpers 的 ObservableObject 或 ReactiveUI 的 ReactiveObject 继承的 ViewModel,甚至是实现 INotifyPropertyChanged 的自定义基础 class。实际上,唯一的要求是您的 ViewModel 按需要的方式工作。
对于相当静态的视图,这可能只是一个 "dumb" ViewModel class,它可能有几个在构造函数中设置的属性。
public class AboutViewModel
{
public AboutViewModel()
{
Title = "About";
Text = "This is a really awesome app...";
}
public string Title { get; }
public string Text { get; }
}
在大多数情况下,您只需要一个实现 INotifyPropertyChanged 的 ViewModel。这可以通过一个基础 class 来实现,就像这里提到的任何一个,包括来自 MvvmLight 的 ObservableObject,或者它可以直接实现它(尽管我通常不建议这样做)。
我正在将在 Gala MVVMLight
中实现的项目转换为 Prism
。其中一个模型继承自 MVVMLight 中的 ObservableObject。这是在 Prism 中转换此模型的正确方法吗?
public class SampleClass : ObservableObject
到
public class SampleClass : BindableBase
像这样转换 属性 个设置器。
public bool IsActive
{
get { return isActive; }
set { Set(ref isActive, value); }
}
到
public bool IsActive
{
get { return isActive; }
set { SetProperty(ref isActive, value); }
}
底数 class 是什么并不重要。没有明确要求您的 ViewModel 继承自 BindableBase 以使 Prism 正常工作。我有几个项目使用 Prism 作为导航和 DependencyInjection,但使用从 James Montemagno 的 MvvmHelpers 的 ObservableObject 或 ReactiveUI 的 ReactiveObject 继承的 ViewModel,甚至是实现 INotifyPropertyChanged 的自定义基础 class。实际上,唯一的要求是您的 ViewModel 按需要的方式工作。
对于相当静态的视图,这可能只是一个 "dumb" ViewModel class,它可能有几个在构造函数中设置的属性。
public class AboutViewModel
{
public AboutViewModel()
{
Title = "About";
Text = "This is a really awesome app...";
}
public string Title { get; }
public string Text { get; }
}
在大多数情况下,您只需要一个实现 INotifyPropertyChanged 的 ViewModel。这可以通过一个基础 class 来实现,就像这里提到的任何一个,包括来自 MvvmLight 的 ObservableObject,或者它可以直接实现它(尽管我通常不建议这样做)。