.net 如何从VM管理表单控件?
我想控制下面的过程。我想用订单保存一个客户 1) 写下客户的姓名、姓氏、电话 2) 精选产品 3) 压入 İ可以用MVVM实现上述功能 但我不能: 插入命令后如何显示messagebox?以及如何激活wpf选项卡控件的第一个选项卡,也显示在客户订单中仅网格中选定的产品.net 如何从VM管理表单控件?,.net,wpf,design-patterns,mvvm,.net,Wpf,Design Patterns,Mvvm,我想控制下面的过程。我想用订单保存一个客户 1) 写下客户的姓名、姓氏、电话 2) 精选产品 3) 压入 İ可以用MVVM实现上述功能 但我不能: 插入命令后如何显示messagebox?以及如何激活wpf选项卡控件的第一个选项卡,也显示在客户订单中仅网格中选定的产品 我可以想出两种方法,我可以在头脑中立即做到这一点 一种方法是在包含消息的窗体上有一个控件。通常,它的可见性是折叠的,但作为保存过程的一部分,您可以设置属性,将其可见性绑定为可见。控件将变为可见,直到单击“确定”按钮,此时它将变为
我可以想出两种方法,我可以在头脑中立即做到这一点 一种方法是在包含消息的窗体上有一个控件。通常,它的可见性是折叠的,但作为保存过程的一部分,您可以设置属性,将其可见性绑定为可见。控件将变为可见,直到单击“确定”按钮,此时它将变为不可见。 对于小型解决方案,这是一种快速简便的方法,但如果您有一个更大的解决方案,那么您将更经常地需要对话框-因此您将需要一个更可扩展的解决方案-这样您就可以将对话框服务注入视图模型,或者使用消息传递在窗口上获得一个对话框控件来显示 例如,在我目前正在进行的项目中,我们使用mvvm light,并且有一个带有子窗口的主窗口。主窗口注册对话框消息,当子窗口发布该消息时,它显示对话框。例如:
public MainPage()
{
this.InitializeComponent();
// http://mvvmlight.codeplex.com/discussions/209338?ProjectName=mvvmlight
Messenger.Default.Register<DialogMessage>(this, OnDialogMessage);
}
private static void OnDialogMessage(DialogMessage message)
{
MessageBoxResult result = MessageBox.Show(message.Content, message.Caption, message.Button);
message.ProcessCallback(result);
}
假设您有一个RaisePropertyChanged事件,该事件处理NotifyPropertyChanged-如果您使用的是mvvmlight,则应该存在该事件
然后在您的保存方法集中选择了edTabindex=x,希望它会更改为正确的选项卡
ServiceLocator.Current.GetInstance<IMessageBoxDisplayer>().Show(
"Selected Product has been saved", "Product Saved", false);
public Task<bool> Show(string messageBoxText, string caption, bool displayCancelButton)
{
if (caption == null)
{
throw new ArgumentNullException("caption");
}
var tcs = new TaskCompletionSource<bool>();
var message = new DialogMessage(messageBoxText, mbr => tcs.SetResult(mbr == MessageBoxResult.OK))
{
Button = displayCancelButton ? MessageBoxButton.OKCancel : MessageBoxButton.OK,
Caption = caption,
};
Messenger.Default.Send(message);
return tcs.Task;
}
<TabControl SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}"/>
set
{
this._selectedTabIndex = value;
this.RaisePropertyChanged(() => this.SelectedTabIndex);
}
}