Ho appena creato una semplice app che fa ciò che descrivi e ha funzionato per me.
XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" AcceptsReturn="True" Height="50"
Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Row="1" Click="Button_Click">Button</Button>
</Grid>
</Window>
ViewModel:
class ViewModel : INotifyPropertyChanged
{
private string text = string.Empty;
public string Text
{
get { return this.text; }
set
{
this.text = value;
this.OnPropertyChanged("Text");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propName)
{
var eh = this.PropertyChanged;
if(null != eh)
{
eh(this, new PropertyChangedEventArgs(propName));
}
}
}
un'istanza di ViewModel
è impostato come DataContext
per la Window
. Infine, la realizzazione di Button_Click()
è:
private void Button_Click(object sender, RoutedEventArgs e)
{
this.model.Text = "Hello\r\nWorld";
}
(mi rendo conto che la vista non dovrebbe in realtà modificare direttamente la proprietà del ViewModel Text
, ma questo è solo un'applicazione di esempio veloce.)
Il risultato è il parola "Ciao" sulla prima riga di TextBox
e "Mondo" è sulla seconda riga.
Forse se pubblichi il tuo codice possiamo vedere cosa c'è di diverso da questo campione?
Grazie Andy, ho capito il problema alla mia fine. Grazie mille per il vostro supporto. – deepak