コントロール自体ではなく、バインドしているコレクション内の要素を非表示にする必要があります。
MVVMパターンを利用して、リストボックスをビューモデルの監視可能なコレクションにバインドします。各アイテムが多くのカスタマイズをサポートする必要がある場合は、他のビューオデルの観察可能なコレクションである可能性があります。そうすれば、リストボックスの操作はC#コレクションの操作と同じくらい簡単になります。コントロール自体をいじることなく、削除/追加/非表示のロジックを実行できます。
編集:
解決策の考え方は次のとおりです。ElementsVM
フィールドではなく、フィールドにバインドしElements
ます。Elements
フィールドは、VMクラスのこのインスタンスのモデルを設定するために使用されます。後で要素を非表示/表示する必要がある場合は、のようなものを使用します_elementsVM[0].Visibility = Visibility.Collapsed
。
private ObservableCollection<Element> _elements;
public ObservableCollection Elements {
get { return _elements; }
set {
_elements = value;
var VMs = _elements.Select(el => new ElementVM(el, Visibility.Visible);
_elementsVM = new ObservableCollection<ElementVM>(VMs);
//NotifyPropertyChanged ("ElementVM")
}
}
privae ObserableCollection<ElementVM> _elementsVM;
public ObservableCollection ElementsVM {
get { return _elementsVM; }
}
public class ElementVM: INotifyPropertyChanged {
public Element Element { get; set; }
public Visibility IsVisible { get; set; }
public ElementVM (Element element, Visibility visibility) {
Element = element;
IsVisible = visibility;
}
// Implement INotifyPropertyChanged here
}
私の実装にElementVM
少し取り組む必要がありますPropertyChanged
。それがセッターなどで実行されることを確認してください。IsVisible
また、アイテムテンプレートのIsVisible
プロパティをのプロパティにバインドする必要がありますElementVM
。