WPF MVVM模式下,viewmodel与view交互怎么办?

stg609 2010-02-12 03:01:54
一般的交互当然可以通过binding解决,我提出的这个交互无法简单的通过binding解决,比如我需要在viewmodel中执行某一命令的中途对应打开某个窗体来显示或接收一些信息,这种情况该怎么解决呢?viewmodel肯定不包含对view的引用,那肯定不能直接创建一个view。

我看见过attached behaviors(http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx),但是不知道适不适用在某一命令执行到某个过程时创建一个窗体。

请教各位达人有没有合适的方法来实现这种交互?
...全文
487 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
behaviors可以做任何事,例如可以将一个持续几十个步骤的复杂操作(例如设计动画)用一个behaviors插入程序。但是如果你不按照步骤细分动作实体,过于粗糙地把多个步骤硬说成“一个命令”,神仙也解决不了这个程序——而且也没有必要去解决。
  • 打赏
  • 举报
回复
什么是“执行某一命令的中途”呢?

把两个事件(它们因某个状态数据而相关)说成“一个”,自然就麻烦了。
KnowKjava 2010-02-19
  • 打赏
  • 举报
回复
引用楼主 stg609 的回复:
一般的交互当然可以通过binding解决,我提出的这个交互无法简单的通过binding解决,比如我需要在viewmodel中执行某一命令的中途对应打开某个窗体来显示或接收一些信息,这种情况该怎么解决呢?viewmodel肯定不包含对view的引用,那肯定不能直接创建一个view。

我看见过attached behaviors(http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx),但是不知道适不适用在某一命令执行到某个过程时创建一个窗体。

请教各位达人有没有合适的方法来实现这种交互?
attached
stg609 2010-02-19
  • 打赏
  • 举报
回复
Thank you all.

I think I got the method.

我在Viewmodel中设置一个事件,并让该事件在某一属性改变后触发,然后在View的code behind中添加这个事件处理程序,在该事件处理程序中来打开窗口。这样就不需要让Viewmodel知道任何窗口对象,只需要在必要的时候改变那个属性,会自动触发View中打开窗口的事件。
Jeremiah 2010-02-19
  • 打赏
  • 举报
回复

//用这个方法打开WINDOW的前提是你创建的是 WPF Application
btnSubmit_Click(object sender, RoutedEventArgs e)
{
//Execute your Command in ViewModel or whatever~
if(Command returns successfully)
{
var frm = new frmWPFWindow();
frm.Show();
this.Hide();
}
else
{
//do something.
}
}


Is this what you want?
stg609 2010-02-19
  • 打赏
  • 举报
回复
谢谢回复,不过还不是很明白。
我也把我的问题用个例子,描述的清楚点:
假如我现在在“登录窗体”中有一个登录按钮,我在点击这个按钮后,会触发一个Command,在这个Command的Execute事件中,我会对用户名、密码等信息进行核实,如果核实正确,则会打开主窗体,否则提示出错信息。

那要如何设置才能在执行这个Command的时候去新打开一个主窗体呢?这个Command是写在ViewModel中的,那创建这个窗体的代码该如何解决呢?
stg609 2010-02-18
  • 打赏
  • 举报
回复
大家新年快乐,这题有人知道吗?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧