2012-03-29 10 views
0

Ich kann nicht herausfinden, warum die Bindung Änderungen in meinem großen Projekt nicht funktioniert. Ich habe es zu einem Beispielprojekt vereinfacht, das immer noch nicht funktioniert. Ich möchte den Datenkontext auch weiterhin so gestalten, wie ich es gerade bin, wenn es möglich ist, denn so macht es das andere Projekt. Mit dem folgenden Code wird der Text in SomeText nicht in der Textbox angezeigt. Wie behebe ich das?Basic Silverlight Binding

-Code Behind:

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     DataContext = new ViewModel(); 
    } 
} 

Datenklasse:

public class ViewModel 
{ 
    public string SomeText = "This is some text."; 
} 

Hauptbenutzerkontrolle:

<UserControl xmlns:ig="http://schemas.infragistics.com/xaml"   x:Class="XamGridVisibilityBindingTest.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:XamGridVisibilityBindingTest="clr-namespace:XamGridVisibilityBindingTest" mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 
     <TextBox Text="{Binding SomeText}" BorderBrush="#FFE80F0F" Width="100" Height="50"> </TextBox> 
    </Grid> 
</UserControl> 

Edit: Ich versuche, nur in eine Richtung Bindung zu tun.

Antwort

2

Sie benötigen eine Eigenschaft zu verwenden, und Ihre VM von INotifyPropertyChanged erben machen und das Property Ereignis auslösen, wenn EINTEXT ändert:

public class ViewModel : INotifyPropertyChanged 
{ 
    private string someText; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public string SomeText 
    { 
     get { return someText; } 
     set 
     { 
      someText = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("SomeText")); 
      } 
     } 
    } 

    public ViewModel() 
    { 
     SomeText = "This is some text."; 
    } 
} 
+0

Das würde funktionieren, aber ich brauche nur 1-Wege-Bindung. –

0

ich es herausgefunden, können Sie nur auf Eigenschaften binden!

public class ViewModel 
{ 
    public string SomeText { get; set; } 

    public ViewModel() 
    { 
     SomeText = "This is some text."; 
    } 
}