| 

.NET C# Java Javascript Exception

1
Eine View soll mit einem ViewModel in einem DataTemplate genutzt werden.
Das DataTemplate hat ein Binding auf das aktuelle Model einer Collection, z.B. ItemsSource von ListBox.

Wie geht das? Oder sollte man es anders machen? - Eine Collection von ViewModels mit jeweiligen Model käme mir etwas seltsam vor.
24.02.2011
Florian Mätschke 370 1 7
2 Antworten
1
Ja du legst dir ne Liste an mit ViewModels und Bindest daran.

Hier ein Grid:
DataSource="{Binding AllCustomers}"


Im ViewModel
public ObservableCollection<CustomerViewModel> AllCustomers { get; set; }


Constructor
public AllCustomersViewModel(ICustomerRepository repo)
{
if (repo == null)
throw new ParameterException(typeof(ICustomerRepository).ToString());

_repo = repo;

// Liste AllCustomers neu zusamensetzen
AllCustomers = new ObservableCollection<CustomerViewModel>(
from c in _repo.GetAll() select new CustomerViewModel(c,_repo));

}


Das CustomerViewModel
Wichtig, hier mappen vom Objekt auf das ViewModel
/// <summary>
/// Gets the customer entity.
/// </summary>
/// <value>The customer entity.</value>
public Customer CustomerEntity
{
get { return _customerEntity; }
}
private Customer _customerEntity;
/// <summary>
/// Gets the customer ID.
/// </summary>
/// <value>The customer ID.</value>
public int CustomerID
{
get { return _customerEntity.CustomerID; }
}

/// <summary>
/// Gets or sets the first name.
/// </summary>
/// <value>The first name.</value>
public string FirstName
{
get { return _customerEntity.FirstName; }
set
{
if (_customerEntity.FirstName != value)
{
_customerEntity.FirstName = value;
RaisePropertyChanged("FirstName");
}
}
}

public CustomerViewModel(Customer cust, ICustomerRepository repo)
{
// Parameter einstellen
_repo = repo;
_customerEntity = cust;
}
25.02.2011
mit den coolen kleinen Bildchen über der Textbox für die Antwort kann man seinen Text prima formatieren, unter anderem code in codetags packen, ich hab das mal für dich erledigt ;)
Mario Priebe 26.02.2011
0
Nach langer Googlei bin ich dann doch noch fündig geworden!

Dieser Threads: http://forums.silverlight.net/forums/p/216246/513274.aspx war dabei sehr hilfreich.

Man scheint tatsächlich eine Collection von ViewModels zu brauchen.

Ein Link in der Lösung führt zu einem ViewModelCollectionWrapper:
http://www.thesilvermethod.com/Default.aspx?Id=VMCollectionWrapperSynchronizeaModelcollectionwithaViewModelcollection

Dieser kümmert sich um die umständliche Synchronisation der beiden Collections mit Models/ViewModels die immer wieder anfallen würde.

Jetzt gehts so wie es soll.
Dennoch bin ich tief in mir drin noch nicht so richtig zufrieden mit dieser Lösung.
24.02.2011
Florian Mätschke 370 1 7

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH