Суть в том, что не могу привязать в xaml модель, созданную во viewmodel.
Если модель получается из SelectedItem ListBox'а, то все норм. А если через new то ничего. Сам код.
viewmodel
private CCard selectedCard;
public CCard SelectedCard
{
get { return selectedCard; }
set
{
selectedCard = value;
OnPropertyChanged("SelectedCard");
}
}
private Commands selectedRegnumCommand;
public Commands SelectedRegnumCommand
{
get
{
return selectedRegnumCommand ??
(selectedRegnumCommand = new Commands(obj =>
{
selectedCard = getSelectedCard(SelectedRegnum.Regnum);
}));
}
}
getSelectedCard - возвращает объект типа CCard
xaml
<StackPanel x:Name="SP_cardInfo" DockPanel.Dock="Right" Width="300" DataContext="{Binding SelectedCard}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120*"/>
<ColumnDefinition Width="180*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Номер документа:" Grid.Column="0" />
<TextBlock x:Name="Tbl_regNum" Text="{Binding SelectedCard.Regnum, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" Margin="10,0,64,0" />
</Grid>
</StackPanel>
CCard
public string Regnum
{
get { return _regnum; }
set
{
_regnum = value;
OnPropertyChanged("Regnum");
}
}
В модели реализовал INotifyPropertyChanged. Другие моменты работают. Я так понимаю, что проблема именно в том, что SelectedCard создается через new. Подскажите где туплю
Каюсь, проморгал момент. Обращаюсь напрямую к полю selectedCard, а не через метод public CCard SelectedCard. Поэтому поле меняется, но интерфейс об этом не знает, отсюда и не идет биндинг в xaml. А также вылез за пределы контекста
Вы задаете DataContext у StackPanel
DataContext="{Binding SelectedCard}"
А потом работаете вне этого контекста
{Binding SelectedCard.Regnum, ...}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей