/ / WPF ViewModel alterações não atualizadas para controles filho contidos em um controle pai com conjunto de dados datacontext - wpf, mvvm, ligação de dados

WPF ViewModel alterações não atualizadas para controles filho contidos em um controle pai com datacontext set - wpf, mvvm, ligação de dados

Eu tenho dois painéis de pilha, um tem o datacontextset e os controles filho dentro dele são vinculados às propriedades do objeto. O segundo painel de pilha não possui ligação de dados, mas os controles filho referenciam o objeto e a propriedade.

Ao atualizar o objeto no modelo de exibição, oas alterações feitas no nome e no sobrenome são mostradas no segundo painel de pilha, mas nada muda no primeiro, e eu não entendo o porquê. Alguém tem algum conselho sobre por que isso seria dado quando, quando o aplicativo é carregado pela primeira vez, o correto Como os detalhes são exibidos nos dois painéis, o problema ocorre apenas quando uma alteração é feita através do modelo de exibição.

XAML:

 <Grid>
<StackPanel>
<StackPanel DataContext="{Binding Person}">
<TextBlock Text="{Binding FirstName}"></TextBlock>
<TextBox Text="{Binding LastName}"></TextBox>
<Button Command="{Binding DataContext.Commands.Update, ElementName=mainView}" VerticalAlignment="Bottom" Margin="0 0 0 20">Update</Button>
</StackPanel>
<StackPanel>
<TextBlock Text="{Binding Person.FirstName}"></TextBlock>
<TextBox Text="{Binding Person.LastName}"></TextBox>
</StackPanel>
</StackPanel>
</Grid>

Em anexo está uma cópia de toda a solução que demonstra que o problema pode ser encontrado Aqui.

Qualquer ajuda muito apreciada!

Respostas:

0 para resposta № 1

Eu fiz um XAML assim:

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<StackPanel DataContext="{Binding Person}"  >
<TextBlock Text="{Binding FirstName}"  ></TextBlock>
<TextBox Text="{Binding LastName}" ></TextBox>
<Button Command="{Binding DataContext.Commands.Update, ElementName=mainView}" VerticalAlignment="Bottom" Margin="0,0,0,20" Width="75">Update</Button>
</StackPanel>
<StackPanel >
<TextBlock Text="{Binding Person.FirstName}"></TextBlock>
<TextBox Text="{Binding Person.LastName}"></TextBox>
</StackPanel>
</StackPanel>
</Grid>
</Window>

e no código atrás eu fiz isso:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

DataContext = new MainViewModel()
{
Person = new Person() { FirstName = "Bruce", LastName = "Lee" }
};
}
}

e ... funciona!

este é o MainViewModel:

public class MainViewModel : ViewModelBase
{
private Person person;
public Person Person
{
get { return person; }
set
{
if (person != value)
{
person = value;
OnPropertyChanged("Person");
}
}
}
}

e então, essa é a classe da pessoa

public class Person : ViewModelBase
{
private string lastName;
public string LastName
{
get { return lastName; }
set
{
if (lastName != value)
{
lastName = value;
OnPropertyChanged("LastName");
}
}
}

private string firstName;
public string FirstName
{
get { return firstName; }
set
{
if (firstName != value)
{
firstName = value;
OnPropertyChanged("FirstName");
}
}
}

}

Espero que ajude