Ich tue mich momentan immer noch schwer mit DataBinding und Co. Dabei soll das richtig geil sein, wenn mans einmal kapiert hat, hab ich mir sagen lassen.
Von
Win32 her kenne ich das Füllen einer Listview so:
Ich erstelle mir eine Listview. Um nun meine Einträge hinzuzufügen, erstelle ich mir ein ListviewItem, füge meine SubItems hinzu und füge schließlich das komplette ListViewItem dem ListView über Items.Add(lvItem) hinzu.
Das funktioniert so natürlich prinzipiell in WPF-Anwendungen. Allerdings soll ich ja den Code vom Design trennen, und deshalb auch nicht programmatisch die Items so der ListView hinzufügen. Zumindest wird das
an dieser Stelle behauptet und auch gleich ein Codeschnipsel gezeigt (bisschen scrollen
).
Der Übersichthalber hab ich den Code auch mal hier her kopiert:
Code:
public class BindableListViewModel
{
public IList<TypeOfObjectToDisplay> AllObjectsToDisplay;
public ICommand AddNewItemToList;
public BindableListViewModel()
{
AllObjectsToDisplay = new ObservableList<TypeOfObjectToDisplay>();
AddNewItemToList = new RelayCommand(AddNewItem(), CanAddNewItem());
}
public bool CanAddNewItem()
{
//logic that determines IF you are allowed to add
//For now, i'll just say that we can alway add.
return true;
}
public void AddNewItem()
{
AllObjectsToDisplay.Add(new TypeOfObjectToDisplay());
}
}
Ich verstehe das jetzt so, dass ich unter DataContext ein Objekt angeben würde, das auf dieser Klasse basiert. Jetzt lese ich bspw. meine Einträge aus der Datenbank aus, fülle ein Objekt mit den Daten der Datenbank und übergebe das gefüllte Objekt der IList vom Typ "Song". Und WPF kümmert sich darum, das alles in der ListView angezeigt wird.
Hab ich das soweit erstmal richtig verstanden? Wo sind die Stolpersteine? Und vor allem: Wo kann ich mehr darüber lesen, gerne auch in Tutorial-Form? Denn WPF/Silverlight/XAML ist für einen
Win32-Anhänger doch erstmal ne riesige Umstellung...
//Edit:
Ich habe
diesen Artikel über MVVM gefunden. Klingt sehr interessant, genauso wie das Demoprojekt. Ich denke, ich werde mich damit erstmal auseinander setzen.