WPF. Не привязывается модель

208
05 марта 2017, 05:44

Суть в том, что не могу привязать в 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. Подскажите где туплю

Answer 1

Каюсь, проморгал момент. Обращаюсь напрямую к полю selectedCard, а не через метод public CCard SelectedCard. Поэтому поле меняется, но интерфейс об этом не знает, отсюда и не идет биндинг в xaml. А также вылез за пределы контекста

Answer 2

Вы задаете DataContext у StackPanel

DataContext="{Binding SelectedCard}"

А потом работаете вне этого контекста

{Binding SelectedCard.Regnum, ...}
READ ALSO
Как дождаться загрузки BitmapImage?

Как дождаться загрузки BitmapImage?

Есть BitmapImage и у него есть проблемаЕго нельзя просто создать

229
Установка ItemsSource для ContexMenu

Установка ItemsSource для ContexMenu

Нужно задавать меню коллекцией объектов

294
c# Форматирование числа (ИНН) в строку

c# Форматирование числа (ИНН) в строку

Есть числовое(decimal) поле ИНН (10, 12 символов)Первые 2-а числа в ИНН - код региона

316