palaber
Captain
- Registriert
- Juni 2006
- Beiträge
- 3.856
Hallo zusammen,
ich versuche mein Problem mal sehr begrenzt darzustellen:
Ich habe für eine ListView ein Behavior (DependencyProperty SelectedItems) implementiert. Man kann ja leider nur auf ein Element (SelectedItem) einer Liste binden, was in "SelectionMode = Multi" ziemlich mies ist.
Naja, auf jeden Fall kann ich jetzt eine Liste von Objekten versorgen, die mir alle selektierten Items abspeichert. Diese Liste ist in meinem ViewModel. Verlasse ich nun die View und öffne diese wieder, geht natürlich die Selektion verloren. Ich möchte aber die vorherige Selektion wieder anzeigen.
Die SelectedItem-Liste im ViewModel konnte ich wieder versorgen. Jetzt möchte ich diese Liste als ListView.SelectedItems verwenden. Geht aber nicht, da diese Property "readonly" ist.
Also dachte ich mir ich iteriere einfach über die ViewModel.SelectedItems-Liste und setzte für jedes Item, dass mit einem Item aus ListView.Items übereinstimmt das IsSelected Flag auf true. Blöderweise ist IsSelected eine Property vom ListViewItem und ich habe keine Ahnung wie ich daran komme. Kann mir da einer helfen?
Angeblich soll es so gehen - bei mir kommt dann aber eine Liste mit null raus:
Nachfolgenden noch etwas Code um gewisse Dinge zu verdeutlichen:
Eigene DependencyProperty:
Zugriff nur wenn ListView inizialisiert wurde und beim vorherigen schließen der View die ListView eine Selektion hatte:
Edit:
In der Methode OnSelectedItemsChanged ist listView.View immer null! Bin gerade am prüfen, ob das ein Problem ist.
ich versuche mein Problem mal sehr begrenzt darzustellen:
Ich habe für eine ListView ein Behavior (DependencyProperty SelectedItems) implementiert. Man kann ja leider nur auf ein Element (SelectedItem) einer Liste binden, was in "SelectionMode = Multi" ziemlich mies ist.
Naja, auf jeden Fall kann ich jetzt eine Liste von Objekten versorgen, die mir alle selektierten Items abspeichert. Diese Liste ist in meinem ViewModel. Verlasse ich nun die View und öffne diese wieder, geht natürlich die Selektion verloren. Ich möchte aber die vorherige Selektion wieder anzeigen.
Die SelectedItem-Liste im ViewModel konnte ich wieder versorgen. Jetzt möchte ich diese Liste als ListView.SelectedItems verwenden. Geht aber nicht, da diese Property "readonly" ist.
Also dachte ich mir ich iteriere einfach über die ViewModel.SelectedItems-Liste und setzte für jedes Item, dass mit einem Item aus ListView.Items übereinstimmt das IsSelected Flag auf true. Blöderweise ist IsSelected eine Property vom ListViewItem und ich habe keine Ahnung wie ich daran komme. Kann mir da einer helfen?
Angeblich soll es so gehen - bei mir kommt dann aber eine Liste mit null raus:
Code:
List<ListViewItem> listViewItems = new List<ListViewItem>();
foreach (object item in listView.Items)
{
ListViewItem lvi = (ListViewItem)listView.ItemContainerGenerator.ContainerFromItem(item);
listViewItems.Add(lvi);
}
Nachfolgenden noch etwas Code um gewisse Dinge zu verdeutlichen:
Eigene DependencyProperty:
Code:
public static readonly DependencyProperty SelectedItemsProperty = DependencyProperty.Register(
"SelectedItems",
typeof(List<object>),
typeof(KlassenNameBehavior),
new FrameworkPropertyMetadata(OnSelectedItemsChanged));
Zugriff nur wenn ListView inizialisiert wurde und beim vorherigen schließen der View die ListView eine Selektion hatte:
Code:
private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.OldValue == null && e.NewValue != null)
{
// Liste mit selektierten Items aus ViewModel
List<object> newList = e.NewValue as List<object>;
KlassenNameBehavior behavior= d as KlassenNameBehavior;
if (newList != null && newList.Count > 0 && behavior != null)
{
ListView listView = behavior.AssociatedObject;
}
}
}
Edit:
In der Methode OnSelectedItemsChanged ist listView.View immer null! Bin gerade am prüfen, ob das ein Problem ist.
Zuletzt bearbeitet:
(Edit)