1

エンティティの監視可能なコレクションがあり、各エンティティには追加、削除、変更、キャンセルのステータスがあります。

クリックすると、次のようにコレクションをフィルタリングする必要がある4つのボタン(トグル)があります。

  • [追加済み] ボタンを選択すると、コレクションにはステータスが追加されたエンティティが含まれているはずです。
  • [削除済みおよび追加済み] ボタンを選択すると、コレクションにはステータスが [削除済み] のエンティティとステータスが [追加済み] のエンティティが含まれ、残りは含まれません。
  • [削除済み、追加済み、変更済み] ボタンを選択すると、コレクションには、ステータスが [削除済み、追加済み、変更済み] のエンティティが含まれているはずです。. . すぐ。
  • ボタンの 1 つを選択解除すると、そのステータスのエンティティがコレクションから削除されます。たとえば、[削除済み] の選択を解除し、[追加済み] と [変更済み] を選択した場合、コレクションには [追加済み] と [変更済み] ステータスのアイテムが含まれ、削除済みアイテムは含まれません。

これを実装するために、マスター コレクションとフィルター処理されたコレクションを作成しました。Filter コレクションは、選択と選択解除に基づいてフィルター処理されます。以下は私のコードです:

private bool _clickedAdded;
    public bool ClickedAdded
    {
        get { return _clickedAdded; }
        set
        {
            _clickedAdded = value;
            if(!_clickedAdded)
                FilterAny(typeof(Added));

        }
    }

    private bool _clickedDeleted;
    public bool ClickedDeleted
    {
        get { return _clickedDeleted; }
        set
        {
            _clickedDeleted = value;
            if (!_clickedDeleted)
                FilterAny(typeof(Deleted));
        }
    }

    private bool _clickedModified;
    public bool ClickedModified
    {
        get { return _clickedModified; }
        set
        {
            _clickedModified = value;
            if (!_clickedModified)
                FilterAny(typeof(Modified));
        }
    }

    private void FilterAny(Type status)
    {
        Func<Entity, bool> predicate = entity => entity.Status.GetType() != status;

        var filteredItems = MasterEntites.Where(predicate);
        FilteredEntities = new ObservableCollection<Entity>(filteredItems);
    }

ただし、これは上記のルールに違反します。たとえば、すべてを選択してから、追加済みを削除してから削除した場合、追加済み、変更済み、キャンセル済みのリストが引き続き表示されます。フィルター処理されたコレクションでは、Modified および Canceled のみである必要があります。

この問題を解決するために私を助けてもらえますか? また、これを解決するには 2 つの異なるリストが必要ですか。.NET 3.5 を使用していることに注意してください。

4

1 に答える 1