Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选中或取消选中菜单项时隐藏/显示gridview列_C#_Wpf_Mvvm - Fatal编程技术网

C# 选中或取消选中菜单项时隐藏/显示gridview列

C# 选中或取消选中菜单项时隐藏/显示gridview列,c#,wpf,mvvm,C#,Wpf,Mvvm,我想在单击菜单项时隐藏栅格视图列 Xaml: 菜单项标题与网格视图列标题相同。选中或取消选中菜单项时,我希望显示或隐藏“栅格视图”列 我有一个类似于这里的GidViewColumnVisibilityManager。 视图模型: public MyViewModel() { MyListItems = SomeClass.instance.messages; _MenuItems = new ObservableCollection<M

我想在单击菜单项时隐藏栅格视图列

Xaml:


菜单项标题与网格视图列标题相同。选中或取消选中菜单项时,我希望显示或隐藏“栅格视图”列

我有一个类似于这里的GidViewColumnVisibilityManager。

视图模型:

    public MyViewModel()
    {
        MyListItems = SomeClass.instance.messages;
        _MenuItems = new ObservableCollection<MenuClass>();
        //populates the view menu
        PopulateViewMenu();

        this.Columns = new ObservableCollection<ColumnDescriptor>
        {

            new ColumnDescriptor{ Width = 40, HeaderText ="column1",  DisplayMember= "column1"},
            new ColumnDescriptor{ Width = 40, HeaderText="column2" ,  DisplayMember= "column2"},
            new ColumnDescriptor{ Width = 70, HeaderText="column3" , DisplayMember="column3"},

        };

        //event to command 
        CheckedViewMenuItemsCmd = new RelayCommand<MenuClass>(CheckedViewMenuItems);
    }
     public ObservableCollection<ColumnDescriptor> Columns { get; private set; }

    private ICommand _addColumnCommand;

    public ICommand AddColumnCommand
    {
        get
        {
            if (_addColumnCommand == null)
            {
                _addColumnCommand = new RelayCommand<string>(
                    s =>
                    {
                        this.Columns.Add(new ColumnDescriptor { HeaderText = s, DisplayMember = s });
                    });
            }
            return _addColumnCommand;
        }
    }

    private ICommand _removeColumnCommand;
    public ICommand RemoveColumnCommand
    {
        get
        {
            if (_removeColumnCommand == null)
            {
                _removeColumnCommand = new RelayCommand<string>(
                    s =>
                    {
                        this.Columns.Remove(this.Columns.FirstOrDefault(d => d.DisplayMember == s));
                    });
            }
            return _removeColumnCommand;
        }
    }
     private void CheckedViewMenuItems(MenuClass m)
    {
        try
        {
            bool IsChecked = m.IsChecked;
            if (IsChecked)
            {

                ColumnDescriptor cl1 =     new ColumnDescriptor{ Width = 40, HeaderText =m.Header,  DisplayMember= "Revision"};
                int idx = Convert.ToInt32(m.Tag);
                int insertidx = Math.Min(idx, this.Columns.Count);
                this.Columns.Insert(insertidx, cl1);
            }
            else
            {
                foreach (var item in this.Columns)
                {
                    if (item.HeaderText == m.Header)
                    {
                       // item.DisplayMember = "";
                        this.Columns.Remove(item);                            

                        break;
                    }

                }
            }


        }
        catch (Exception ex)
        {
            Debug.WriteLine(String.Format("{0}{1}{2}{1}{3}", ex.GetType().ToString(), Environment.NewLine, ex.Message, ex.StackTrace));

        }

    }
publicMyViewModel()
{
MyListItems=SomeClass.instance.messages;
_MenuItems=新的ObservableCollection();
//填充“视图”菜单
PopulateViewMenu();
this.Columns=新的ObservableCollection
{
新的列描述符{Width=40,HeaderText=“column1”,DisplayMember=“column1”},
新的列描述符{Width=40,HeaderText=“column2”,DisplayMember=“column2”},
新的列描述符{Width=70,HeaderText=“column3”,DisplayMember=“column3”},
};
//事件到命令
CheckedViewMenuItemsCmd=新的中继命令(CheckedViewMenuItems);
}
公共ObservableCollection列{get;private set;}
专用ICommand_addColumn命令;
公共ICommand addColumn命令
{
得到
{
如果(_addColumnCommand==null)
{
_addColumnCommand=newrelayCommand(
s=>
{
Add(新的ColumnDescriptor{HeaderText=s,DisplayMember=s});
});
}
返回_addcolumn命令;
}
}
私有ICommand_removeColumn命令;
公共ICommand removeColumn命令
{
得到
{
if(_removeColumnCommand==null)
{
_removeColumnCommand=newrelaycommand(
s=>
{
this.Columns.Remove(this.Columns.FirstOrDefault(d=>d.DisplayMember==s));
});
}
return\u removeColumn命令;
}
}
私有void CheckedViewMenuItems(菜单类m)
{
尝试
{
bool IsChecked=m.IsChecked;
如果(已检查)
{
ColumnDescriptor cl1=新的ColumnDescriptor{Width=40,HeaderText=m.Header,DisplayMember=“Revision”};
int idx=转换为32(m.Tag);
int insertidx=Math.Min(idx,this.Columns.Count);
this.Columns.Insert(insertidx,cl1);
}
其他的
{
foreach(此.Columns中的变量项)
{
if(item.HeaderText==m.Header)
{
//item.DisplayMember=“”;
此.Columns.Remove(项);
打破
}
}
}
}
捕获(例外情况除外)
{
Debug.WriteLine(String.Format(“{0}{1}{2}{1}{3}”),例如GetType().ToString(),Environment.NewLine,例如Message,例如StackTrace));
}
}
对于如何使用booleon-to-visible转换器并实现该功能,我有点困惑。谢谢你的帮助。如果你有问题,请问我。谢谢各位。
我尝试了插入和删除,而不是显示和隐藏,删除就像一个符咒,但插入需要一个显示成员绑定绑定到集合的每一次,这是显而易见的。我试过一个专栏,效果很好,我需要它为所有人服务。有什么想法吗?

我找到了解决办法。我有一个新函数GetdisplayMember,它根据单击的菜单项返回字符串。这里是解决办法。效果很好。干杯

 private string GetDisplayMember(int tag)
    {
        string displayMember = string.Empty;
        if (tag != null)
        {
            switch (tag)
            {
                case 0:
                    displayMember = "Revision";
                    break;
                case 1:
                    displayMember = "Class";
                    break;
                case 2:
                    displayMember = "Errordate";
                    break;
         }

      }

        return displayMember;
    }

    private void CheckedViewMenuItems(MenuClass m)
    {
        try
        {    
            if (m!=null)
            {

                bool IsChecked = m.IsChecked;
                if (IsChecked)
                {                    
                   ColumnDescriptor cl1 =new   ColumnDescriptor     
                    {           

                       HeaderText =m.Header, 
                       DisplayMember= GetDisplayMember(m.Tag)
                     };
                       int idx = Convert.ToInt32(m.Tag);
                       int insertidx = Math.Min(idx,   
                       this.Columns.Count);
                       this.Columns.Insert(insertidx, cl1);
                }
                else
                {
                    foreach (var item in this.Columns)
                    {
                        if (item.HeaderText == m.Header)
                        {
                           // item.DisplayMember = "";
                            this.Columns.Remove(item);  
                            break;
                        }
                    }
                }            

            }              
        }
        catch (Exception ex)
        {
            Debug.WriteLine(String.Format("{0}{1}{2}{1}{3}", ex.GetType().ToString(), Environment.NewLine, ex.Message, ex.StackTrace));
            ErrorLogger.Log(LogLevel.Error, ex.ToString());
        }

非常感谢。是的,它们不应该有标签。很抱歉
 private string GetDisplayMember(int tag)
    {
        string displayMember = string.Empty;
        if (tag != null)
        {
            switch (tag)
            {
                case 0:
                    displayMember = "Revision";
                    break;
                case 1:
                    displayMember = "Class";
                    break;
                case 2:
                    displayMember = "Errordate";
                    break;
         }

      }

        return displayMember;
    }

    private void CheckedViewMenuItems(MenuClass m)
    {
        try
        {    
            if (m!=null)
            {

                bool IsChecked = m.IsChecked;
                if (IsChecked)
                {                    
                   ColumnDescriptor cl1 =new   ColumnDescriptor     
                    {           

                       HeaderText =m.Header, 
                       DisplayMember= GetDisplayMember(m.Tag)
                     };
                       int idx = Convert.ToInt32(m.Tag);
                       int insertidx = Math.Min(idx,   
                       this.Columns.Count);
                       this.Columns.Insert(insertidx, cl1);
                }
                else
                {
                    foreach (var item in this.Columns)
                    {
                        if (item.HeaderText == m.Header)
                        {
                           // item.DisplayMember = "";
                            this.Columns.Remove(item);  
                            break;
                        }
                    }
                }            

            }              
        }
        catch (Exception ex)
        {
            Debug.WriteLine(String.Format("{0}{1}{2}{1}{3}", ex.GetType().ToString(), Environment.NewLine, ex.Message, ex.StackTrace));
            ErrorLogger.Log(LogLevel.Error, ex.ToString());
        }