使用 DelegateCommand 出现 Specified cast is not valid 最近写快捷键需要 DelegateCommand ,于是用了 DelegateCommand ,运行时出现 Specified cast is not valid 原因是 DelegateCommand 传入的 Object 是可空的,如果使用 Double ,那么是不可空的,就出现错误...于是就可以啦 如果遇到 DelegateCommand 出现这个错误,一般就是使用不可空的类型,只要让他可空就好。
上期学习了CheckBox和RadioButton,那么本期来学习Button的另外两个子控件ToggleButton和Switch,在开发中同样比较重要。...一、ToggleButton ToggleButton(开关按钮)是Android系统中比较简单的一个组件,是一个具有选中和未选中双状态的按钮,并且需要为不同的状态设置不同的显示文本。...ToggleButton所支持的XML属性和相关方法如下表所示。...Switch所支持的XML属性和相关方法如下表所示。...到此,这两个Button子组件ToggleButton和Switch已经学习完成,你都掌握了吗?
WPF提供常用应用程序所用的命令集,常用的命令集包括:ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommands和...内置的 WPF 命令类型为 RoutedCommand 和 RoutedUICommand,这些命令是否就满足你的要求了呢,事实上WPF的内置Command还有需要许多不足,因此在模式与实践团队的Prism...项目中也打造一套自己的Command,特别是与UI元素耦合以及不支持命令组合,所以他们在Prism中便增加了另外一套Command:DelegateCommand和CompositeCommand。 ...DelegateCommand:实现了WPF/Silverlight的ICommand接口,仍只支持一个CanExecute和Execute挂接,但其实现一个称为IActiveAware的接口用于指示是否处于集合状态...CompositeCommand:也是WPF/Silverlight的ICommand接口的一个实现,但其同时也是DelegateCommand的组合,可以向其中注册或取消注册DelegateCommand
Prism 简介 Prism 是一个用于构建松耦合、可维护和可测试的 XAML 应用的框架,它支持所有还活着的基于 XAML 的平台,包括 WPF、Xamarin Forms、WinUI 和 Uwp Uno...Prism.Core、Prism.Wpf 和 Prism.Unity 从很久以前开始,臃肿 就是 Prism 被提起最多的标签。...相比 Prism 6.3,刚刚发布的 8.0 已经好很多了(虽然还是有很多个项目),例如 WPF 平台的项目已经大幅删减,只保留了 Prism.Wpf、Prism.DryIoc 和 Prism.Unity...以 WPF 为例,核心的项目是 Prism.Core,它提供实现 MVVM 模式的核心功能以及部分各平台公用的类。然后是 Prism.Wpf,它提供针对 Wpf 平台的功能,包括导航、弹框等。...生产力工具 如果觉得属性和 DelegateCommand 的定义有些啰嗦,可以试试安装这个工具:Prism Template Pack,它提供了一些实用的代码段和一些 Project 和 Item 的模板
通过本节课可以学习到的内容: ToggleButton的用法 RatingBar的用法 ---- 实例代码: 运行效果参见本课程示例App:安卓猴Demos github地址:https:/.../github.com/opengit/MonkeyAndroid ---- ToggleButton的用法 ToggleButton,状态开关按钮,例如ON/OFF,它允许用户在两者之间进行切换。...RatingBar的用法 RatingBar,它是SeekBar和ProgressBar的扩展,用星型来显示等级评定。 效果预览 ?...和Switch的事件监听 */ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked...和RatingBar,前者在App的设置页面,后者在商店商品的评分方面,应用都是十分广泛的。
在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,...WPF会自动发出通知去更新UI。 ...在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时...与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF中通常是通过数据绑定来更新UI;在响应用户操作上,WinForm是通过控件的事件来处理,而WPF可以使用命令绑定的方式来处理...Command="{Binding AddCommand}"/> 运行效果: 分别拖动滑块slider1和slider2
我们看到这里是不是一开始想象到使用WPF带有的导航系统,通过Frame和Page进行页面跳转,然后通过导航日志的GoBack和GoForward实现后退和前进,其实这是通过使用Prism的导航框架实现的...方法激活和失效视图,像ItemsControl这种可以同时显示多个活动视图的,可以通过Region的Add和Remove方法控制增加活动视图和失效视图,而当视图的KeepAlive为false,Region...因为当导航的时候,同样的是在触发了Region的Activate和Deactivate,当有IRegionMemberLifetime接口时则会触发Region的Add和Remove方法,这里可以去看下...,OnNavigatedFrom和OnNavigatedTo方法中IsNavigationTarget,OnNavigatedFrom和OnNavigatedTo中形参NavigationContext...四.导航日志 Prism导航系统同样的和WPF导航系统一样,都支持导航日志,Prism是通过IRegionNavigationJournal接口来提供区域导航日志功能, public interface
新建WPF 应用程序WPFMVVMExample ? 2 Model实现 在Model文件夹下新建业务类StudentModel(类文件StudentModel.cs),类的详细代码如下所示。...我们可以将实现了ICommand接口的命令DelegateCommand赋值给Button(命令源)的Command属性(只有实现了ICommandSource接口的元素才拥有该属性),这样Button...6 说明 WPF中使用MVVM可以降低UI显示与后端逻辑代码的耦合度,即更换界面时,只需要修改很少的逻辑代码就可以实现,甚至不用修改。...在WPF中使用数据绑定机制,当数据变化后,数据会通知界面变更的发生,而不需要通过访问界面元素来修改值,这样在后端逻辑代码中也就不必操作或者很少操作界面的元素了。...使用MVVM,可以很好的配合WPF的数据绑定机制来实现UI与逻辑代码的分离,MVVM中的View表示界面,负责页面显示,ViewModel负责逻辑处理,包括准备绑定的数据和命令,ViewModel通过View
本文记录在 UNO Platform 的桌面窗口项目里,进入和退出全屏窗口的方法,此方法包括 UNO 的 WPF 和 GTK 和 WinUI 版本的实现 实现思路,添加抽象的 IPlatformProvider...接口,在接口里面分别添加进入全屏和退出全屏的方法,如以下代码,接着再分别在 Skia.GTK 和 Skia.WPF 和 WinUI 上实现对接方法。...为了测试效果,进入 MainPage.xaml 里面添加一个 ToggleButton 按钮,用来控制进入和退出全屏,界面代码如下 ToggleButton x:Name="FullScreenButton...= (ToggleButton) sender; if (toggleButton.IsChecked is true) { PlatformHelper.PlatformProvider...ExitFullScreen(); } } 完成代码之后,分别切换到 UNO 的 WPF 和 GTK 和 WinUI 平台上,进行构建和运行项目。
本文告诉大家如何在 WPF 实现在托盘显示,同时托盘可以右击打开菜单,双击执行指定的代码 NotifyIcon WPF 通过 Nuget 安装 Hardcodet.NotifyIcon.Wpf 可以快速做到在...WPF 显示托盘 ?...双击托盘运行代码需要添加命令,创建一个 ViewModel 用来绑定命令 public class DelegateCommand : ICommand { public...public ICommand ShowWindowCommand { get { return new DelegateCommand...ICommand ExitApplicationCommand { get { return new DelegateCommand
让右键菜单知道当前选中的是哪个 GridView 的 Row 是很逗比的,因为咱可以使用 WPF 的 DataContext 绑定的方法,让数据一层层分发。...CanExecuteChanged; } 通过这个类就可以在 XAML 写绑定命令的资源和代码,请看代码 DelegateCommand x:Key="OpenFileCommand..." ExecuteDelegate="OpenFileCommand_OnExecute" >DelegateCommand> DelegateCommand x:Key...OpenFileCommand_OnExecute 和 OpenFolderCommand_OnExecute 方法 private void OpenFileCommand_OnExecute...刚才咱也说到了右键菜单是放在 ListViewItem 的,而 DataContext 是会在视觉树继承的,所以右键菜单的 DataContext 和右击的行的是相同的 <MenuItem Header
在 WPF 使用绑定的时候,发现绑定不上,也许是因为绑定的对象不是当前作用的对象的原因。也许是绑定错了对象,或者对象被变更了。...本文来告诉大家这个调试思路和方法 使用一个简单的例子来告诉大家,这样比较直观 我有一个简单的应用,这个应用的字符串显示绑定了一个 ToggleButton 也就是下图的写着 点击 的按钮 ?...x:Name="ToggleButton" Margin="10,10,10,10" Content="点击" Click="ToggleButton_OnClick" />...{ } } 此时如果作用的 ToggleButton 和绑定表达式的绑定对象是相同的,那么 ReferenceEquals 将会进入分支...fakeToggleButton); } 本文代码放在github欢迎小伙伴访问 ---- 本文会经常更新,请阅读原文: https://blog.lindexi.com/post/WPF
本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用事件聚合器实现模块间的通信 一.事件聚合器 在上一篇 .NET Core 3 WPF MVVM框架 Prism系列之模块化 我们留下了一些问题...,就是如何处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯...然后我们看看现在Demo项目的事件模型和程序集引用情况,如下图: ? ...我们发现PatientModule和MedicineModule两个模块之间做到了通讯,但却不相互引用,依靠引用PrismMetroSample.Infrastructure程序集来实现间接依赖关系,实现了不同模块之间通讯且低耦合的情况...四.几种订阅方式设置 我们在Demo已经通过消息聚合器的事件机制,实现订阅者和发布者之间的通讯,我们再来看看,Prim都有哪些订阅方式,我们可以通过PubSubEvent类上面的Subscribe函数的其中最多参数的重载方法来说明
二、MVVM介绍 之前接触并使用过MVC,Model - View - Controller的模式,页面和代码分离的写法,MVVM:Model - View - ViewModel,和WPF...PlaceOrderCommand { get; set; } public DelegateCommand SelectMenuItemCommand { get; set; } private...,通过Binding,发现,后台的数据改变了,直接就会在前台页面上更新,这就是MVVM + WPF的魅力之一。...同时也要知道,View和ViewModel之间的绑定,也是使用这个框架的难点之一。...(5)View WPF中View的一个特色就是1、可以拖动控件;2、通过HTML页面对控件的属性、样式进行设置;3、通过Binding和后台数据进行绑定。
--概述 这个项目演示了如何在WPF中使用各种Prism功能的示例。如果您刚刚开始使用Prism,建议您从第一个示例开始,按顺序从列表中开始。每个示例都基于前一个示例的概念。...Change Convention 更改ViewModelLocator命名约定 ViewModelLocator - Custom Registrations 为特定视图手动注册ViewModels DelegateCommand...使用DelegateCommand和DelegateCommand CompositeCommands 了解如何使用CompositeCommands作为单个命令调用多个命令 IActiveAware...MainWindow.xaml.cs:这里在窗体构造函数中注入了一个容器扩展接口和一个regin管理器接口,分别用来装载视图和注册regin,窗体的激活和去激活分别通过regions的Activate...pan.baidu.com/s/10Gyks2w-R4B_3z9Jj5mRcA 提取码:0000 开源项目链接:https://github.com/PrismLibrary/Prism-Samples-Wpf
在一个类中同时有CompoundButton 和 RadioGroup vSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener
Prism.Wpf 和 Prism.Unity 这篇是 Prism 8.0 入门的第二篇文章,上一篇介绍了 Prism.Core,这篇文章主要介绍 Prism.Wpf 和 Prism.Unity。...以前做 WPF 和 Silverlight/Xamarin 项目的时候,我有时会把 ViewModel 和 View 放在不同的项目,ViewModel 使用 可移植类库项目,这样 ViewModel...现在,即使在只写 WPF 项目的情况下,但为了强制 ViewModel 和 View 假装是陌生人,做到不留后路,我也倾向于把 View 和 ViewModel 放到不同项目,并且 ViewModel...Prism.Wpf 里包含了 Dialog Service、Region、Module 和导航等几个模块,都是些用在 WPF 的功能。...就算只学习 Prism.Wpf,可它的模块很多,一篇文章实在塞不下。我选择了 Dialog Service 作为代表,因为它的实现思想和其它的差不多,而且弹窗还是 WPF 最常见的操作。
和CommonServiceLocator程序集,引入了Microsoft.Xaml.Behaviors.Wpf,实际上Prism8.0做了以下整合: 用Microsoft.Xaml.Behaviors.Wpf...Windows] Prism 8.0 入门(下):Prism.Wpf 和 Prism.Unity 1.ContainerLocator.Current.Resolve函数去除: ContainerLocator.Current.Resolve...AllMedicines { get { return _allMedicines; } set { _allMedicines = value; } } private DelegateCommand..._loadCommand; public DelegateCommand LoadCommand => _loadCommand ??...(_loadCommand = new DelegateCommand(ExecuteLoadCommand)); async void ExecuteLoadCommand() { await
WPF开发于WinForm之后,从技术发展的角度,WPF比WinForm先进是不容置疑的。...而通过WPF控件的Content Model和Layout系统,WPF控件可以包括任何类型的控件,甚至.Net CLR对象。...很多现代的控件厂商也提供了Composition的控件,实现方法和WPF的Content模型也比较相似。WPF开发团队应该借鉴了Infragistics的很多想法。...通过Command,Routing Event等机制,界面设计人员和程序员有比较清楚的界限。...解决办法,要不是通过写代码,要不是通过数据绑定,前者是界面和代码没法分开,后者还不够灵活。
前言 在WPF中,很多打开下拉框(Popup或Flyout)选择一个结果值的控件,除了ComboBox等少数例外,这种控件都以-Picker做名称后缀。...因为要打开关闭下拉框和计算下拉框的弹出位置, 这类控件实现起来还挺麻烦的。Silverlight Toolkit中贴心地提供了一个Picker控件,可以作为这类控件的基类,省略了大量代码。 2....在Flyout打开的状态,还是希望它所属的按钮有某种已被按下的状态显示,典型的如ComboBox、Extended WPF Toolkit的ColorPicker、WinForm的DateTimePicker...其实WPF/Silverlight时代即已经开始忽略这点UI需求了,但我还是希望可以注意这些UI的细节,毕竟UWP就经常被诟病UI细节缺失。 3....根据这个原则实现的MyTimePicker就缺少了AcceptButton和DismissButton,因为使用了TimePickerFlyout,这个控件本身就有AcceptButton和DismissButton