今天想做一件事情
在我的主程序前添加一个登录窗口
输入密码后可以登录成功
该登录窗口关闭 主窗口打开
点击登录的当然是一个按钮
这个是登录的按钮 两个textbox还没画哈哈
然后我去搜MVVMlight窗口跳转
浏览了近百条信息都无果,百(du)(gu)歌都解决不了我的问题
我很难受
全是MVVMlight Messaging INotifyNevigate这种
但是这一个是消息传递 一个是页面导航
页面导航不支持窗口导航的呀
我都想重构我的主界面了 变成page什么的
结果在我即将放弃的时候 突然浏览到某行代码 拿过来
竟然达到了我的效果
实现的步骤
1.单机登录按钮的时候传递该窗口的信息
xaml代码
<
Button
Content
=
"AAAA"
Command
=
"{Binding UserLogin}"
CommandParameter
=
"{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
>
<
/
Button
>
<
/
Grid
>
2.然后 我们再view model进行处理
public RelayCommand<Window> UserLogin => new RelayCommand<Window>((str) =>
if (str is System.Windows.Window)
new MainWindow().Show();
(str as System.Windows.Window).Close();
});
展示主窗口后关闭
当然我会加一些验证,但是我激动得要记录下来
也给同类需求的铁子们雪中送炭
今天想做一件事情在我的主程序前添加一个登录窗口输入密码后可以登录成功该登录窗口关闭 主窗口打开点击登录的当然是一个按钮这个是登录的按钮 两个textbox还没画哈哈然后我去搜MVVMlight窗口跳转浏览了近百条信息都无果,百(du)(gu)歌都解决不了我的问题我很难受全是MVVMlight Messaging INotifyNevigate这种但是这一个是消息传递 一个是页面导航页面导航不支持窗口导航的呀我都想重构我的主界面了 变成page什么的结果在我即将放弃的时候 突然浏览
自己记录一下怕自己以后都忘记了。
言归正传,对于窗口之间的传值我第一时间先到的就是在子窗口定义一个变量,在父窗口打开子窗口的时候,给子窗口中的变量赋值,从而实现窗口直接的传值。
但是回头想了一下,我正在需要的是让值传到子窗口的ViewModel里面去做数据的处理,我这样做就只能传达窗口里面去,然后在从窗口传到窗口对于的ViewModel中去,然后在去做数据的处理,这样做又觉得有点过于复杂了。
为了不过于复杂的去写,在思考着个问题的时候,突然灵光乍现,想到了一个取巧的方法。
就是父窗口和子窗口都使用同
CommandParameter一般只允许设置一次,所以如果要传递多参数,就要稍微处理一下。我暂时还没找到更好的方案,下面介绍的这个方案我是目前在用的方案,但给人的感觉总是有些别扭,不像一个正统的解决方案:
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ...
第二步:按如下方式修改LoginWindow.xaml,设计登录窗体
<Window x:Class="wpfbase.LoginWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microso
关于在WPF中使用MVVM模式开发的数据绑定问题
在MVVM中事件通过Command属性的绑定实现,在后台使用RelayCommand类型实现一个命令,并且在这个属性中调用事件处理函数。但是在DataTemplete中,如果只是简单的绑定了一个RelayCommand属性,将发生不会触发事件处理函数的情况,这种情况下。应该这样做:
(1)引用ViewModel的命名空间。xmlns
相信很多学习和开发wpf项目的同学都了解过mvvm模式,同样,在mvvm模式下会有一个不可忽视的问题,就是怎么在xaml中弹出窗体,而不破坏MVVM本身的结构。
关于弹出窗体的方式还是很多的,本文先讲一下用触发器做处理。
我们先要在xaml中引用
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
...
虽然说MVVM模式下不建议在Viewmodel层中操控View层中控件,但是在某些情况下,比如想要得到某个事件的参数,在Viewmodel层中不太方便实现,这时候就可以用下面的方法了。
在XAML中
1、引用组件并设置
xmlns:Interaction="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:In
<Button Content="Close" Command="{Binding CloseWindowCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />
其中,`CommandParameter`将窗口作为参数传递给`CloseWindow`方法。
通过上述步骤,即可在MVVM模式下实现关闭窗口功能。