MVVM Light Toolkit是一组组件,可帮助人们开始使用Silverlight,WPF,Xamarin,.NET Core和Windows Phone中的Model - View - ViewModel模式。它是一个轻松实用的框架,仅包含所需的基本组件。
与绑定一起使用的转换器中有一些我无法理解的东西。 :-( 我用 Mvvm-Light 创建了一个简单的示例...... 这里是完整的解决方案:https://testbindingwithconverter.codeplex.com/
我在当前的 WPF 项目中使用 MVVM Light,我想知道什么时候应该使用 MVVM Light 的消息传递而不是 WPF 事件。 WPF 事件: 我的控件.xaml 我在当前的 WPF 项目中使用 MVVM Light,我想知道什么时候应该使用 MVVM Light 的消息传递而不是 WPF 事件。 WPF 事件: MyControl.xaml <ListView SelectionChanged="ListView_OnSelectionChanged" /> MyControl.cs private MyViewModel ViewModel { get { return this.DataContext as MyViewModel; } } private void ListView_OnSelectionChanged( object sender, SelectionChangedEventArgs e ) { this.ViewModel.ListViewSelectionChanged( ( (ListView) sender ).SelectedItems ); } MVVM 轻消息传递: MyControl.cs private void ListView_OnSelectionChanged( object sender, SelectionChangedEventArgs e ) { Messenger.Default.Send( new ListViewSelectionMessage {SelectedItems = ((ListView)sender).SelectedItems} ); } ListViewSelectionMessage.cs public class ListViewSelectionMessage { public IList SelectedItems { get; set; } } 我的视图模型 public class MyViewModel { MyViewModel() { Messenger.Default.Register<ListViewSelectionMessage>(this, this.ListViewSelectionChaged); } private void ListViewSelectionChaged( ListViewSelectionMessage message ) { // ... } } 因为使用 Messenger,一切都可以很容易地解耦,所以我很想在任何地方都使用 Messenger。使用 Messenger 而不是 Events 有什么问题吗?或者这会产生我不知道的问题。谢谢! 通常,任何 MVVM 框架(Prism、MVVM Light)中的消息都是在具有插件架构的应用程序中的松散耦合组件之间进行通信的好方法,因为您可以通过共享库中声明的合约将消息从一个模块发送到另一个模块。当您单独开发应用程序或在小团队中由高技能程序员开发应用程序时,可以使用它。 否则有一个主要缺点:重构和调试非常困难,因为你不能只点击消息并“查找用法”,你需要先去合约(接口)而不是“查找用法”,然后直观地查找带有订阅/注册指令的地方。此外,开发人员通常会忘记取消订阅消息,因此您将面临问题,即从一个模块发送并打算在同一模块中处理的消息将在其他模块中错误地处理,因此会导致意外行为并产生许多令人痛苦的错误。 以上内容均基于我的个人经验,因此结果可能会有所不同。只要小心消息,它就会对你有好处。另外,在我看来,消息作为事件的替代品有点开销/过度设计,因为当您拥有紧密耦合的组件时,您并不真正需要它。 2024 年更新,随着 MVVMLight 被弃用,MVVM Toolkit(其精神继承者)具有 Messenger 类:https://learn.microsoft.com/dotnet/communitytoolkit/mvvm/messenger 性能基准:https://devblogs.microsoft.com/dotnet/announcing-the-dotnet-community-toolkit-800/#improved-messenger-apis-📬
我正在寻找有关处理 wpf mvvm 项目中越来越多的命令的建议。 我的视图模型收集了大量的模型,我觉得在项目成熟之前我需要做
我正在尝试绑定网格的可见性,但无法这样做。 //ViewModel类 私人可见性_isVisiblePane = Visibility.Hidden; 公共可见性 isVisiblePane { 得到...
如何将 WPF 中的这种 MVVM 方法迁移到 WinUI?
历史上,在 WPF 中使用 MVVM(通常使用 MVVMLight 完成)时,我使用将控件绑定到其视图模型中的某些内容的方法。也就是说: XAML: xmlns:vm="clr-namespace:My.Namespace.
在我的应用程序中,有一个常见的 Icon.xaml 文件,其中包含许多具有唯一键名称的 PathGeometry 图形,如下所示。 在我的应用程序中,有一个常见的 Icon.xaml 文件,其中包含许多具有唯一键名称的 PathGeometry 图形,如下所示。 <PathGeometry x:Key="CloseGeometry" Figures="m 357.0883 499.0572 12.62375 12.6275 5.31375 -5.31625 -12.62625 -12.62625 12.62625 -12.61875 -5.31375 -5.3125 -12.62375 12.62 -12.6325 -12.62 -5.30375 5.3125 12.6175 12.61875 -12.6175 12.62625 5.30375 5.31625 12.6325 -12.6275 z"/> <PathGeometry x:Key="NormalGeometry" Figures="M4.3685131,23.127279L4.3685131,47.283243 47.117023,47.283243 47.117023,23.127279z M25.087107,13.948568C23.539013,13.948568 22.286318,15.201555 22.286318,16.74834 22.286318,18.292325 23.539013,19.547214 25.087107,19.547214 26.6327,19.547214 27.886597,18.292325 27.886597,16.74834 27.886597,15.201555 26.6327,13.948568 25.087107,13.948568z M16.126242,13.948568C14.580646,13.948568 13.326751,15.201555 13.326751,16.74834 13.326751,18.292325 14.580646,19.547214 16.126242,19.547214 17.673136,19.547214 18.928329,18.292325 18.928329,16.74834 18.928329,15.201555 17.673136,13.948568 16.126242,13.948568z M7.1679735,13.948568C5.621069,13.948568 4.3685136,15.201555 4.3685131,16.74834 4.3685136,18.292325 5.621069,19.547214 7.1679735,19.547214 8.713438,19.547214 9.9674625,18.292325 9.9674625,16.74834 9.9674625,15.201555 8.713438,13.948568 7.1679735,13.948568z M0,10.684L53.755001,10.684 53.755001,51.668001 0,51.668001z M8.5679998,0L58.668022,0 64,0 64,5.6864691 64,45.317999 58.668022,45.317999 58.668022,5.6864691 8.5679998,5.6864691z"/> <PathGeometry x:Key="MaximiseGeometry" Figures="M5.2010002,14.812L5.2010002,43.573997 56.098,43.573997 56.098,14.812z M29.868601,3.8869994C28.026201,3.8869996 26.534,5.3791947 26.534,7.2190399 26.534,9.0588851 28.026201,10.553 29.868601,10.553 31.7085,10.553 33.202,9.0588851 33.202,7.2190399 33.202,5.3791947 31.7085,3.8869996 29.868601,3.8869994z M19.200649,3.8869994C17.359457,3.8869996 15.867001,5.3791947 15.867001,7.2190399 15.867001,9.0588851 17.359457,10.553 19.200649,10.553 21.042044,10.553 22.536999,9.0588851 22.536999,7.2190399 22.536999,5.3791947 21.042044,3.8869996 19.200649,3.8869994z M8.5339746,3.8869994C6.6931,3.8869996 5.2010002,5.3791947 5.2010002,7.2190399 5.2010002,9.0588851 6.6931,10.553 8.5339746,10.553 10.37495,10.553 11.867,9.0588851 11.867,7.2190399 11.867,5.3791947 10.37495,3.8869996 8.5339746,3.8869994z M0,0L63.999001,0 63.999001,48.792999 0,48.792999z"/> <PathGeometry x:Key="MinimiseGeometry" Figures="M 0 1, 1 1 "/> ...... 但我的问题是,大约有 300 到 400 个不同的 PathGeometries,并且很难检查特定类型的图像是否存在。 示例: 如果程序员开发了新的WPF表单,其中需要使用删除Icon,那么他将首先检查Icon.xaml文件是否已存在,如果不存在则将其添加。但是这个检查需要手动完成,这很痛苦。 有没有最简单的方法来预览或检查特定图像是否存在。 目前我知道有两个工具可以帮助你预览PathGeometry xaml 数据。 XamlPadX 下载:XamlPadX v4.0。 <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <Grid> <Path Stroke="Black" StrokeThickness="2" Data="M4.3685131,23.127279L4.3685131,47.283243 47.117023,47.283243 47.117023,23.127279z M25.087107,13.948568C23.539013,13.948568 22.286318,15.201555 22.286318,16.74834 22.286318,18.292325 23.539013,19.547214 25.087107,19.547214 26.6327,19.547214 27.886597,18.292325 27.886597,16.74834 27.886597,15.201555 26.6327,13.948568 25.087107,13.948568z M16.126242,13.948568C14.580646,13.948568 13.326751,15.201555 13.326751,16.74834 13.326751,18.292325 14.580646,19.547214 16.126242,19.547214 17.673136,19.547214 18.928329,18.292325 18.928329,16.74834 18.928329,15.201555 17.673136,13.948568 16.126242,13.948568z M7.1679735,13.948568C5.621069,13.948568 4.3685136,15.201555 4.3685131,16.74834 4.3685136,18.292325 5.621069,19.547214 7.1679735,19.547214 8.713438,19.547214 9.9674625,18.292325 9.9674625,16.74834 9.9674625,15.201555 8.713438,13.948568 7.1679735,13.948568z M0,10.684L53.755001,10.684 53.755001,51.668001 0,51.668001z M8.5679998,0L58.668022,0 64,0 64,5.6864691 64,45.317999 58.668022,45.317999 58.668022,5.6864691 8.5679998,5.6864691z" /> </Grid> </Page> 然后将 PathGeometry 数据(“Figures”节点的字符串)放入“Data”内部的值: 接下来,您需要单击左上角的“自动解析”按钮,您可以查看渲染结果(屏幕截图中的红色边框区域)。请参阅下文,我仅使用您数据中的第二个数据。 WPF 几何变换工具 下载:WPF 几何变换工具。 将节点“Figures”的字符串放入Input Geometry的文本区域,即可看到结果(截图中的红色边框区域)。 备份 如果下载链接现在无效,请使用备份: https://github.com/yanglr/WindowsDevTools/tree/90682d0383436abd3e61134aeded6363161da377/XamlPadX%26plugins
MvvmLight 工具包安装程序 4.0.23.1.msi,未安装 VS2010 模板
我正在运行 GalaSoft MvvmLight Toolkit MSI 安装程序 (GalaSoft.MvvmLight.4.0.23.1.msi),但我没有安装任何模板或片段。
我有一个 wpf 应用程序,并使用 mvvm light 工具包进行数据绑定。我有一个父视图有一个父级的数据网格,子控件有一个用于所选子级的子网格
如何在 DataTemplate 的 DataType 属性中引用泛型类型?
我有一个像这样定义的ViewModel: 公共类 LocationTreeViewModel : ObservableCollection、INotifyPropertyChanged TTree:树基 我想要...
我正在使用 MVVM Light 更新项目。 在 UserEditView 中,有一个用户列表。选择一个用户,用户数据将出现在 StackPanel 中,可在其中进行编辑。 为了让事情变得更容易,
大家好,我有一个场景,我想切换 4 个不同内容控件的可见性。我设置了不透明度的视觉状态,并根据每个给定的状态折叠(参见代码。)我想要什么
我有一个使用MVVMLight messenger的Xamarin.Android应用程序。该应用程序也在使用一个后台服务。应用程序和服务都注册到一个 ...
我是一个MVVM模式的新手。经过长时间的上网查询,我从一个按钮的MVVM命令开始。为了更好的实现,我是用MVVM轻NuGet包来写代码的。有2个按钮,在点击......。
WP8 MvvmLight命名空间丢失,EventToCommand不存在
我仅在Windows Phone 8项目中使用MVVM Light库(来自Nuget包),并且我想在ToggleSwitch中使用EventToCommand。我有以下几行代码:
我有两个相关的类:Smartphone和Model。 Smartphone包含如下所示的Model集合:public class Smartphone {public string BrandName {get;组; } ...
MVVM视图切换-InitializeComponent之后未填充新视图数据上下文
我正在开发我的第一个WPF应用程序,并试图坚持使用MVVM方法。我正在使用MVVM Light。它是一个简单的应用程序,它仅显示称为“合并”的内容的列表,并允许用户......>
具有Async / Await的通用Windows UI响应性
[请帮助我了解如何正确等待长时间执行的任务,以使UI在Universal Windows应用程序中保持响应状态。在下面的代码中,OperateSystem是一个继承于...
MVVMLight工具箱Messenger类引起问题。射击N次
我有一个名为Work.xaml的视图。此Work.xaml包含多个WorkSkeleton.xaml。 Work.xaml的ViewModel是WorkViewModel。 Work.xaml包含在MainPage.xaml中,该按钮具有要加载的按钮...
我一直在使用从文章(可能是这篇文章)中复制的RelayCommand,下面的CreateExamCommand可以正常工作,并且CanExecute绑定到`Name是否为空。 XAML ] >>
[MVVMLight WPF ProgressBar异步任务中的绑定
谁能告诉我为什么我的ProgressBar在任务结束之前无法更新? ProgressBar值绑定到我的ViewModel属性,称为ProgressCurrentValue;该例程位于一个Task中。 ...