多个UserControl中的WPF ToolBarControl

时间:2017-03-03 12:30:53

标签: c# wpf xaml mvvm user-controls

我正在开展一个项目,其中请求是在多个ToolBarControl中实施UserControlsUserControl主要拥有该工具栏和GridView(Devexpress)。 我正在使用WPF和MVVM以及Caliburn.Micro框架进行开发。

问题在于,我需要在ToolBarControl中使用XAML的c / p代码,然后在ViewModel中实现属性。

我正在寻找一种更好的方法,现在我觉得这将是一种反思。 任何建议都会有所帮助,代码示例也是如此。

更新#2

自定义工具栏中的控件应该能够向上或向下移动选定的行,删除项目,编辑和创建(最后两个应该打开一个新窗口)。 假设我有CustomersListViewModel,其CustomersListView中有自定义ToolBarControlGridControl。 当我点击添加按钮时,它应该打开我CustomersEditViewModel。 单击“删除”时,应删除列表中的选定项。 当我单击向上移动时,它应向上移动选定的行。

1 个答案:

答案 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;
                              }
        }