首页 > 解决方案 > ToObservableChangeSet 和 ObservableCollection 元素顺序

问题描述

我想我错过了一些东西,所以我希望有人能指出我正确的方向。

我有一个绑定到ObservableCollecion. 然后我使用.ToObservableChangeSet创建 Observable,并通过函数BuildComponentString()and ToProperty(),将此 List 转换为OAPH<string> exampleComponent包含所有元素的列表ObservableCollection,按它们出现在ObservableCollection. 到目前为止一切顺利,一切正常,当我向/从 中添加/删除元素时,TextBlock很好地实时ObservableCollection绑定到更新。string ExampleComponent

现在的问题!当我使用 Move 更改 ObservableCollection/listbox 中元素的顺序时,字符串中项目的顺序不会改变。任何人都可以解释为什么会这样以及是否有更好的方法来实现这一目标?

class FileSettingsViewModel:SettingsTabViewModelBase
{
    public FileSettingsViewModel()
    {
        FileNameComponents = new ObservableCollection<IFileNameComponent>();

        exampleComponent = this.FileNameComponents
            .ToObservableChangeSet(x => x)
            .ToCollection()
            .Select(y => BuildComponentString(y))
            .ToProperty(this, x => x.ExampleComponent);
    }

    private readonly ObservableAsPropertyHelper<string> exampleComponent;
    public string ExampleComponent => exampleComponent.Value;

    public ObservableCollection<IFileNameComponent> FileNameComponents
    {
        get { return fileNameComponents; }
        set
        {                
            this.RaiseAndSetIfChanged(ref fileNameComponents, value);
        }
    }

    private string BuildComponentString(IReadOnlyCollection<IFileNameComponent> components)
    {
        string Output = "";
        foreach (IFileNameComponent FileNameComponent in components)
        {
            Output = Output + FileNameComponent.Token;
        }
        
        ReplaceComponents(Output);
        return Output;
    }
}

编辑:所以我认为这与 ToCollection 调用有关 - 集合没有被索引。虽然不知道用什么代替它...

编辑 2:最后,我没有设法让它与 DynamicData 一起工作,但处理 collectionchanged 事件就成功了。

标签: c#mvvmreactiveuidynamic-data

解决方案


推荐阅读