/ Zmeny WPF ViewModel neboli aktualizované pre podradené ovládacie prvky obsiahnuté v nadradenej kontrole so sadou dátového kontextu - wpf, mvvm, dátová väzba

Zmeny WPF ViewModel nie sú aktualizované pre podriadené ovládacie prvky obsiahnuté v nadradenej riadiacej jednotke s dátovým súborom dát - wpf, mvvm, väzba dát

Mám dva zásobníky, jeden má dátový kontextsada a podradené ovládacie prvky v rámci neho sú viazané na vlastnosti objektu. Druhý stackpanel nemá databázové prepojenie, ale podradené ovládacie prvky odkazujú na objekt a vlastnosť.

Pri aktualizácii objektu v modeli viewmodelu,zmeny vykonané v krstnom mene a priezvisku sa zobrazujú v druhom zásobníku, ale nič sa nezmení v prvom a nerozumiem prečo? Má niekto nejakú radu, prečo by sa to dalo tak, že pri prvom načítaní aplikácie bude správne podrobnosti sú zobrazené na oboch paneloch, problém nastane iba vtedy, keď je zmena uskutočnená prostredníctvom modemu viewmodel.

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>

Pripojená je kópia celého riešenia, ktoré demonštruje problém tu.

Akákoľvek pomoc veľmi ocenil!

odpovede:

0 pre odpoveď č. 1

Vytvoril som XAML takto:

<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>

a v kóde za tým som urobil toto:

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

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

a .. funguje to!

toto je MainViewModel:

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

a potom je to trieda osôb

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");
}
}
}

}

Dúfam, že to pomôže