Avatar billede Lasse Novice
07. januar 2011 - 18:51 Der er 1 løsning

MVVM, WPF og C#

Jeg er nybeynder i MVVM verdenen og har lidt problemer med at finde en god loesning...

Jeg har foelgende pseudo XAML:

<Window DataContext="ViewModel">
  <TextBlock Text="Navn:" />
  <TextBox Text="{Binding NewEntity.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
  <Button IsEnabled="{Binding IsNewEntityValid}" />
</Window>

Pseudo ViewModel:

public class ViewModel : INotifyPropertyChanged
{
  public ViewModel ()
  {
    NewEntity = new Entity();
    NewEntity.PropertyChanged += eh; // Event handler bliver aldrig fjernet...
  }

  private void eh(object sender, EventArgs e)
  {
    this.OnPropertyChanged("IsNewCompanyValid");
  }

  public Entity NewEntity {get; private set;}

  public event PropertyChangedEventHandler PropertyChanged;

  public bool IsNewEntityValid {get { return NewEntity.Name.Length > 0; }}
}

Entity er en klasse som er blevet autogenereret fra SQL to Link => den implementerer INotifyPropertyChanged.

Idet TextBox aendres, saa opdateres Name i NewEntity. Det skyder PropertyChanged af, der bliver fanget af ViewModel, der saa skyder oenskede PropertyChanged("IsNewCompanyValid"). Det opdaterer i sidste ende knappen i Viewet.

Problemet er at jeg ikke fjerner event handleren. Dvs NewEntity har altid denne eventHandler paa sig. Hvad goer man i "best practice"?
Avatar billede Lasse Novice
21. februar 2011 - 05:59 #1
lukker spg.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester