2016-08-02 8 views
1

Hier ist meine DemoModel.cs KlasseWie binden Sie eine Eigenschaft an einen Textblock/eine Textbox?

public int Age {get; set;} 

DemoViewModel.cs

DemoViewModel() 
{ 
    DemoModel dm = new DemoModel(); 
    dm.Age = 22; 
} 

My View

<TextBlock FontSize="20" Text="{Binding Age,Mode=OneWay}"></TextBlock> 

, wenn ich das obige Programm ausführen ich habe nicht alles bindet an meinen Textblock erhalten. .Kindly poste deine wertvollen Vorschläge TIA

+1

Setzen Sie den DataContext Ihrer Sicht mit dem Objekt DemoViewModel? – CarbineCoder

Antwort

0

Versuchen Sie das. Es sollte funktionieren. Sie müssen INotifyPropertyChanged implementieren und das Ereignis PropertyChanged auslösen, um die Ansicht zu melden, dass sich Ihre Property geändert hat. Jetzt binden Sie die Age Eigenschaft an TextBlock und es sollte gut funktionieren.

public class DemoViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private int age; 

    public int Age 
    { 
     get { return age; } 
     set 
     { 
      if (value != age) 
      { 
       age = value; 
       NotifyPropertyChanged("Age"); 
      }  
     } 
    } 

    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 

außerdem sicher, dass Ihre Ansichten DataContext zum DemoViewModel gesetzt.

+0

i müde die oben, aber das Ergebnis ist das gleiche .. ja i gesetzt haben die 'DataContext' zu' DemoViewModel' ... 'public partial class DemoView: Usercontrol { privaten DemoViewModel _viewModel; public DemoViewModel ViewModel { get {return _viewModel; } set {_viewModel = Wert; } } public DemoView() { InitializeComponent(); ViewModel = neues Demo.ViewModel.DemoViewModel(); this.DataContext = Ansichtsmodell; } } ' – surya

+0

Stellen Sie sicher, dass Ihre Ansicht Modellklasse öffentliche 'öffentliche Klasse DemoViewModel' ist. Es funktioniert gut an meinem Ende. – ViVi

+0

ja schon ist es auf öffentlich eingestellt .. bin ich etwas in meinem Hauptfenster ändern müssen .. 'xmlns: local =" Clr-Namespace: Demo.ViewModel " xmlns: views =" CLR-Namespace: Demo.View " mc: Ignorable = "d" Title = "Mainwindow" height = "350" width = "525"> ' – surya

0

Im Hinblick

die Datacontext in View angeben

xmlns:local="clr-namespace:Demo.ViewModel" 
xmlns:views="clr-namespace:Demo.View" 
xmlns:viewModel="clr-namespace:Demo.ViewModel" 
mc:Ignorable="d" Title="MainWindow" 
Height="350" Width="525"> 
<window.DataContext> 
<viewModel:DemoViewModel/> 
</window.DataContext> 
<grid> 
<TextBlock FontSize="20" Text="{Binding Age,Mode=OneWay}"></TextBlock> 
</grid> 

In Ansichtsmodell

public class DemoViewModel : INotifyPropertyChanged 
{ 
public event PropertyChangedEventHandler PropertyChanged; 

private int age; 

public int Age 
{ 
get { return age; } 
set 
{ 
    if (value != age) 
    { 
     age = value; 
     NotifyPropertyChanged("Age"); 
    }  
} 
} 

private void NotifyPropertyChanged(String info) 
{ 
if (PropertyChanged != null) 
{ 
    PropertyChanged(this, new PropertyChangedEventArgs(info)); 
} 
} 
} 

In Modell

public int Age {get; set;} 

Normalerweise sollte dies Ihr Problem lösen. Wenn Sie damit arbeiten, sollten Sie vermeiden, Code hinter die Ansicht zu schreiben. in meinem Beispiel setzt den Datenkontext in XAML selbst