为了账号安全,请及时绑定邮箱和手机立即绑定

WPF ObservableCollection 未在功能区视图中更新

WPF ObservableCollection 未在功能区视图中更新

C#
达令说 2023-07-09 09:55:19
我创建了一个 C# WPF 应用程序,其中的 RibbonApplicationMenu 显示最近使用的 (MRU) 列表。不幸的是,当我从列表中选择现有文件或上传新文件时,显示不会更新。在 XAML 中我有:<local:MostRecentFiles x:Key="MostRecentFilesData" />    ...<ribbon:RibbonApplicationMenu.AuxiliaryPaneContent>    <ribbon:RibbonGallery Name="RecentDocuments" CanUserFilter="False"         SelectedValue="{Binding MostRecentFile, UpdateSourceTrigger=PropertyChanged}">        <ribbon:RibbonGalleryCategory Header="Recent Documents"            ItemsSource="{DynamicResource MostRecentFilesData}">        </ribbon:RibbonGalleryCategory>    </ribbon:RibbonGallery></ribbon:RibbonApplicationMenu.AuxiliaryPaneContent>DataContext 设置为包含以下内容的类private ObservableCollection<string> _mostRecentFile = new ObservableCollection<string>();public ObservableCollection<string> MostRecentFile{    get { return _mostRecentFile; }    set    {        _mostRecentFile = value;        OnPropertyChanged("MostRecentFile");    }}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}在 OpenFile 例程中,代码是MostRecentFiles mrf = new MostRecentFiles();mrf.AddMRUitem(openFileDlg.FileName);MostRecentFiles 类包含主要的类方法,我在代码中放置了一些示例文件路径。public class MostRecentFiles : ObservableCollection<string>{    public ObservableCollection<string> MRUmenuItems = new ObservableCollection<string>();    public MostRecentFiles()    {        AddMRUitem(@"C:\MyDocuments\File3.txt"); //        AddMRUitem(@"C:\MyDocuments\File2.txt"); // } Sample files        AddMRUitem(@"C:\MyDocuments\File1.txt"); //    }在UpdateMRUList()中取消删除OnPropertyChanged会产生错误:错误 CS1503 参数 1:无法从 'string' 转换为 'System.ComponentModel.PropertyChangedEventArgs'当我启动程序时,菜单正确显示三个文件,但当我选择一个文件时,显示的顺序不会改变;我希望所选文件移至列表顶部。同样,当我打开新文件时,文件名不会添加到 MRU 中。但是,如果我单步执行代码,列表就会按正确的顺序更新。我做错了什么?
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

您正在绑定SelectedValue到一个集合。您不需要自定义集合。只需添加ObservableCollection到您的视图模型并移动所选项目上的项目已更改:


查看型号:


private void OnSelectedMostRecentFileChanged()

{

  // Move the selected item to the front of the list

  this.MostRecentFiles.Move(this.MostRecentFiles.IndexOf(this.SelectedRecentFile), 0);

}


private string _selectedRecentFile;

public string SelectedRecentFile

{

    get { return _selectedRecentFile; }

    set

    {

        _selectedRecentFile= value;

        OnSelectedMostRecentFileChanged();

        OnPropertyChanged(nameof(SelectedRecentFile));

    }

}


private ObservableCollection<string> _mostRecentFiles = new ObservableCollection<string>();

public ObservableCollection<string> MostRecentFiles

{

    get { return _mostRecentFiles; }

    set

    {

        _mostRecentFiles = value;

        OnPropertyChanged(nameof(MostRecentFiles));

    }

}

看法:


<ribbon:RibbonApplicationMenu.AuxiliaryPaneContent>

    <ribbon:RibbonGallery Name="RecentDocuments" CanUserFilter="False" 

        SelectedItem="{Binding SelectedRecentFile}">

        <ribbon:RibbonGalleryCategory Header="Recent Documents"

            ItemsSource="{Binding MostRecentFiles}">

        </ribbon:RibbonGalleryCategory>

    </ribbon:RibbonGallery>

</ribbon:RibbonApplicationMenu.AuxiliaryPaneContent>


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信