我想访问父MVVM类中的用户控件MVVM的值 - 所以我可以将菜单设置为启用/禁用。我无法想象如何将它连接起来。从用户控件传递登录屏幕数据到父
任何帮助表示赞赏下面,因为我已经坚持(我学习贯彻MVVM)
Q1)如上所述 - 如何从用户控件(子)MVVM访问值到父windowviewmodel
Q2)一旦这些值可以访问 - 我需要将它们与菜单(编辑)项目的CommandBinding
连接(用于启用/禁用)。我怎么做?
Q3)小问题 - 目前在我的loginviewmodel中 - 只有当我标签出来时,提交按钮被启用 - 如果我想在我输入一个字符时立即执行它 - 我该怎么办?
代码为我loginscreen.xaml.cs
public partial class Login_Screen_User_Control : UserControl
{
public Login_Screen_User_Control()
{
InitializeComponent();
var loginmodel = new myWindowViewModel();
DataContext = loginmodel;
}
}
public class myWindowViewModel
{
private string _username;
private string _password;
public ICommand OkCommand { get; set; }
public myWindowViewModel()
{
OkCommand = new myCommand(myOkExecute, myCanOkExecute);
}
public string userName
{
get { return _username; }
set { _username = value; }
}
public string passWord
{
get { return _password; }
set { _password = value; }
}
private void myOkExecute(object parameter)
{
//Authetication Logic - lets assume this came back as true
}
private bool myCanOkExecute(object parameter)
{
return (string.IsNullOrEmpty(userName) ? false : (userName.Length > 0 ? true : false));
}
}
代码为我ParentApp.xaml
<Window x:Class="Complete_Application.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:_05_User_Control_POC;assembly=05-User_Control_POC"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Menu Grid.Row="0" Name="menu1" Height="25">
<MenuItem Header="_File">
<MenuItem Header="_New"/>
<MenuItem Header="_Open"/>
<MenuItem Header="_Close"/>
</MenuItem>
<MenuItem Header="_Edit">
<MenuItem Header="_New"/>
<MenuItem Header="_Open"/>
<MenuItem Header="_Close"/>
</MenuItem>
</Menu>
<Grid Grid.Row="1">
<loc:Login_Screen_User_Control></loc:Login_Screen_User_Control>
</Grid>
</Grid>
代码myparent.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var mainwindowviewmodel = new parentWindowViewModel();
DataContext = mainwindowviewmodel;
}
}
public class parentWindowViewModel
{
public parentWindowViewModel()
{
//??
}
}
我已经看过下面的文章 - 的人做确切的类似的事情,但通过Singleton模式,我不想使用 - WPF MVVM - Simple login to an application
感谢jberger - 我想出去选项B,因为它保留在MS空间内,并且不使用MVVM light messenger – Patrick 2012-03-16 13:46:59