添加到“打开最近的文件”

时间:2012-03-23 12:59:29

标签: c# wpf menuitem

如何将click事件添加到新添加的菜单项?以下是我到目前为止所做的事情。显然我的方式非常业余,所以什么可能是更好的方式?

Collection<string> recent_cases = new Collection<string>();

recent_cases.Insert(0, System.IO.Path.GetFileNameWithoutExtension(ofd.FileName));

if (recent_cases.Count == 6)
{
    recent_cases.RemoveAt(5);
}

for (int i = 0; i < recent_cases.Count; ++i)
{
    MenuItem_OpenRecent.Items.Add(recent_cases[i]);                    
}

2 个答案:

答案 0 :(得分:1)

MenuItem通常调用Command而不是让你听点击事件。

鉴于这是最近使用的文件列表,我假设该命令将是“Open File”或类似的东西,并且该命令已经存在。

如果用户选择最近使用的文件,您将需要调用此命令,但另外提供文件名作为命令参数。

所以:

void OnNewFilenameAdded(string filename)
{
    var item = new MenuItem();
    item.Command = _OpenFileCommand;
    item.Header  = filename;
    item.CommandParameter = filename;
    MenuItem_OpenRecent.Items.Insert(0, item);

    if (MenuItem_OpenRecent.Items.Count == 6)
        MenuItem_OpenRecent.Items.RemoveAt(5);
}

如果你真的想保留一个单独的文件名集合,比如你要用MVVM实现它,那么看一下Queue<>类。

答案 1 :(得分:0)

沿着这些方向的东西应该可以解决问题

for (int i = 0; i < recent_cases.Count; ++i)
{
    var mi= new MenuItem();
    mi.Header = recent_cases[i];
    mi.Click += new EventHandler(MenuItem_Click);
    MenuItem_OpenRecent.Items.Add(mi);                    
}


....


void MenuItem_Click(object sender, EventArgs e)
{
    var mi= sender as MenuItem;
    //Do stuff with your file
}