エンティティの監視可能なコレクションがあり、各エンティティには追加、削除、変更、キャンセルのステータスがあります。
クリックすると、次のようにコレクションをフィルタリングする必要がある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 を使用していることに注意してください。