2017-08-25 3 views
0

Wie kann ich die von einem Textbox mit wpf und Devexpress kostenlos MVVM, wenn eine Schaltfläche geklickt wird?set textbox text mit wpf und Devexpress MVVM

Dies ist der XAML-Code meiner Textbox

<TextBox Width="200" Grid.Column="1" Text="{Binding SelectedText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontSize="14"/> 

das ist mein VM Code

 public virtual string SelectedText { get; set; } 
     void AutoUpdateCommandExecute() 
     { 
      Console.WriteLine("Code is Executing"); 
      SelectedText = "TextBox Text is Not Changing"; 
     } 

Der Code ausgeführt wird, aber es das nicht Text der Textbox

ändern Aber wenn ich etwas in die textbox eingeben und den Text dieser Textbox mit diesem Code abrufen.

 void AutoUpdateCommandExecute() 
     { 
      Console.WriteLine("Code is Executing"); 
      Console.WriteLine(SelectedText); 
     } 

Es druckt den Text, den ich in die Textbox eingegeben habe. Was habe ich falsch gemacht? Ich kann den Text nicht einstellen?

Vielen Dank.

Antwort

1

Ihre ausgewählten Text muss entweder ein DependencyProperty sein, die dann die Bindung benachrichtigt, dass es Wert ist hat sich verändert ...

public static readonly DependencyProperty SelectedTextProperty = DependencyProperty.Register("SelectedText", typeof(string), typeof(YourClassType)); 

public string SelectedText 
{ 
    get { return (string)GetValue(SelectedTextProperty); } 
    set { SetValue(SelectedTextProperty , value); } 
} 

ODER

Ihre VM benötigt INotifyPropertyChanged-Schnittstelle und in der SelectedText zu implementieren Setter Sie müssen eine Eigenschaft ausgelöst Ereignis ändern ...

public class VM : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private string _selectedText; 
    public string SelectedText 
    { 
    get { return _selectedText; } 
    set 
    { 
     _selectedText = value; 
     RaisePropertyChanged("SelectedText"); 
    } 
    } 

    private void RaisePropertyChanged(string propertyName) 
    { 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

Vielen Dank, Sie haben mich gerettet. Ich habe den zweiten benutzt. Aber meine Frage ist, was soll ich sagen? in YourClassType **** typeof (YourClassType) –

+1

Die DependencyProperty gehört zu der Klasse, in der sie definiert ist. Wenn die Klasse also ClassExample heißt, hätte das DependencyProperty-Register typeof (ClassExample). Dies teilt dem Framework mit, in welcher Klasse die Eigenschaft zu finden ist. – CodexNZ

+0

Vielen Dank. Deine Erklärung hat mir wirklich geholfen –