现有一个wpf的窗体,其中有一个数据表格。显示有3条记录。现在想实现这样的功能:
1>右键鼠标选择选择任意一条记录时,可以弹出子菜单(子菜单包含3个菜单选项,分别是新建,编辑,删除)。
2>当选择记录后,依据该记录中的标识,判断右键菜单哪些可用,哪些变灰不可用。比如状态为正常的记录,可以使用菜单新建,编辑和删除;如果是状态为删除的,则菜单中的删除不可使用,灰色显示,其它两项可用。
3>当点击菜单后,如何取出右键时点击的当前记录的记录id值。小弟新近接触wpf,对这方面一无所知,还请大神们,多多指教。最好能提供可借鉴参考的代码。

解决方案 »

  1.   

    建议lz找本wpf的书,看看binding, command章节,有时间再看看mvvm基本上都会有lz这种场景的例子
      

  2.   

     <ContextMenu  VerticalAlignment="Center" BorderThickness="0" Background="#FFF6F6F6" Height="Auto" Width="180" DataContext="{Binding}" x:Name="contextMenu2">
                        <MenuItem Header="复制" Command="ApplicationCommands.Copy" x:Name="MenuItem0" />
                        <MenuItem Header="粘贴" Command="ApplicationCommands.Paste" x:Name="MenuItem1" />
                        <MenuItem Header="剪切" Command="ApplicationCommands.Cut" x:Name="MenuItem2" />
                           </ContextMenu>
      

  3.   

    <fstCtrl:CustomDataGrid.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="入院">
                            <MenuItem Header="入院予定編集" Click="SubMenu_Clicked" Name="HospitalizeScheduleEditMenu"/>
                            <MenuItem Header="入院予定取消" Click="SubMenu_Clicked" Name="HospitalizeScheduleCancelMenu" />
    </MenuItem>
    </ContextMenu>
    </fstCtrl:CustomDataGrid.ContextMenu>private void patientListDataGrid_ContextMenuOpening(object sender, ContextMenuEventArgs e)
            {
                PatientListViewModel vm = this.DataContext as PatientListViewModel;            if (vm != null)
                {
                    if (e.OriginalSource is TextBlock)
                    {
                        e.Handled = false;
                        PatientRecord SelectedRecord = this.patientListDataGrid.SelectedItem as PatientRecord;
                        if (SelectedRecord == null)
                        {
                            e.Handled = true;
                        }
                        else
                        {
                            vm.SelectedRecord = SelectedRecord;
                            CheckVisableByParam(SelectedRecord);
                        }
                    }
                    else
                    {
                        e.Handled = true;
                    }
                }
            }private void CheckVisableByParam(PatientRecord SelectedRecord)
            {
                bool haveLeavingPlan;
                bool haveMovingPlan;
                int state = 0;            this.HospitalizeScheduleEditMenu.IsEnabled = false;            this.HospitalizeScheduleCancelMenu.IsEnabled = false;
    }
    ..........