我正在开展一个项目,其中请求是在多个ToolBarControl
中实施UserControls
。
UserControl
主要拥有该工具栏和GridView
(Devexpress)。
我正在使用WPF和MVVM以及Caliburn.Micro框架进行开发。
问题在于,我需要在ToolBarControl
中使用XAML
的c / p代码,然后在ViewModel
中实现属性。
我正在寻找一种更好的方法,现在我觉得这将是一种反思。 任何建议都会有所帮助,代码示例也是如此。
更新#2
自定义工具栏中的控件应该能够向上或向下移动选定的行,删除项目,编辑和创建(最后两个应该打开一个新窗口)。
假设我有CustomersListViewModel,其CustomersListView中有自定义ToolBarControl
和GridControl
。
当我点击添加按钮时,它应该打开我CustomersEditViewModel。
单击“删除”时,应删除列表中的选定项。
当我单击向上移动时,它应向上移动选定的行。
答案 0 :(得分:1)
您可以在app.xaml中使用datatemplate toolbarviemodel和toolbarview,然后使用contentcontrol显示工具栏将其绑定到toolbarviewmodel的实例
的App.xaml:
<ResourceDictionary>
<DataTemplate DataType="{x:Type ViewModelToolBar}">
<startViews:ViewToolBar />
</DataTemplate>
</ResourceDictionary>
并在您的usercontrol中:
<ContentControl Content="{Binding MyViewModelToolBar}"/>
要执行命令,您可以使用带有标记的notify事件作为参数来告诉您应该执行操作的usercontrol视图模型。您可以将工具栏按钮绑定到notifycommand并使用按钮名称或标记作为参数。
ViewModelToolBar:
public event EventHandler Notify;
private void OnNotify(object sender)
{
Notify?.Invoke(sender, new EventArgs());
}
public ICommand NotifyCommand => new DelegateCommand<object>(OnNotify);
并在您的usercontrol ViewModel中:
MyViewModelToolBar = new ViewModelToolBar();
ViewModelToolBar.Notify += ViewModelToolBar_Notify;
private void ViewModelToolBar_Notify(object sender, EventArgs e)
{
switch (sender.ToString())
{
case "Case1":
"perform your operation"
break;
case "Case2":
...
break;
case "Case3":
...
break;
}
}