2010-12-15 7 views
1

baue Ich plane eine WPF-Anwendung, die dynamische Gitter mit Textblöcken im Viewmodel erstellen und dann Schnittstelle (Xaml) mit dem neuen Gitter aktualisieren wird.Wie man dynamisches Gitter und Bindung zu Xaml mit mvvm

Ich habe den ersten Schritt gemacht, aber ich habe Probleme, die Ansicht mit dem neuen Raster zu aktualisieren.

Gibt es einen Beispielcode, wie man das Gitter an das Xaml bindet, das ich mir ansehen kann ?? Ich kann das wirklich nicht herausfinden!

Dank

Antwort

1

du etwas falsch nähern kann, schwer von der Frage- zu sagen

Allgemeinen eine dynamische Gruppe von UI-Elementen in MVVM Sie die Itemssource-Eigenschaft eines Itemscontrol an eine ObservableCollection binden zu zeigen, . Die ItemsControl ItemsTemplate-Eigenschaft konvertiert das YourViewModel-Objekt in ein UIElement, bei dem es sich um einen TextBlock oder einen beliebigen gewünschten Stil handeln kann.

So als Beispiel:

// model 
class Person 
{ 
    public string Name {get; private set;} 
} 

// view model 
class MainViewModel 
{ 
    public ObservableCollection<Person> People {get; private set;} 
} 

//view 
<UserControl DataContext="{Binding MyMainViewModelObject}"> 
    <ItemsControl ItemsSource="{Binding People}"> 
    <ItemsControl.ItemsTemplate> 
     <DataTemplate> 
     <TextBlock Text="{Binding Name}"/> 
     </DataTemplate>/ 
    </ItemsControl.ItemsTemplate> 
    </ItemsControl> 
</UserControl> 

Ich habe nicht diesen Code getestet, ist es nur zu illustrieren. Es gibt andere Wege, das Problem in MVVM zu zerlegen, alles hängt von der Situation ab. Sie müssten uns mehr Details geben, um Ihnen dabei zu helfen. Selten in WPF ist es notwendig, Code zu verwenden, um UI-Elemente zu anderen UIElements usw. zu erstellen oder hinzuzufügen.

Ein Punkt, um mehr entlang der genauen Zeilen der Frage zu beachten, ist jedoch, dass ein ItemsControl entweder an eine Reihe von regulären binden kann Objekte und verwenden Sie es Vorlage, um UIElements von ihnen zu erstellen, ODER es kann an eine Liste von UIElements binden, in welchem ​​Fall die Vorlage nicht angewendet wird (klingt so ist die Situation, die Sie haben).

+0

Danke Guy. Das Problem ist kompliziert zu erklären. Ich muss ein Raster dynamisch erstellen, da ich die Anzahl der Zeilen/Spalten nicht kenne und die Zellen in einigen Fällen auch mit Farben und Kontextmenüs anpassen kann. All diese Prozedur des Erstellens des Gitters mache ich in Viewmodel. Das einzige, was ich brauche, ist, die Ansicht mit dem erstellten Raster im Ansichtsmodell zu aktualisieren. – Guillermo