cesar.iriso Ответов: 1

Привязка объекта XAML в собственность в модель представления


Всем привет.
У меня есть StackPanel с несколькими текстовыми полями, и я хочу связать свойство Text со свойством типа Person, объявленным в ViewModel представления. Адрес должен идти от представления к ViewModel, но я не могу этого сделать.

Что я уже пробовал:

Это и есть рассматриваемый код:
  <StackPanel Grid.Column="1" Grid.Row="1"
      HorizontalAlignment="Center" Margin="40,30" Width="220"
      DataContext="{Binding  TempPersona,Mode=TwoWay,
                   UpdateSourceTrigger=PropertyChanged}">
        <TextBox x:Name="txtNombre" Width="160" Margin="0,6,0,18"
           Text="{ Binding Path=Nombre,
                Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
        </TextBox>
        <TextBox x:Name="txtApellidos" Width="160" Margin="0,0,0,18"
            Text="{ Binding Path=Apellidos, Mode=TwoWay,
               UpdateSourceTrigger=PropertyChanged}"></TextBox>
        <TextBox x:Name="txtDireccion" Width="160" Margin="0,0,0,18"
            Text="{ Binding Path=Direccion, Mode=TwoWay,
              UpdateSourceTrigger=PropertyChanged}">
        </TextBox>
        <TextBox x:Name="txtContacto" Width="160" Margin="0,0,0,18"
             Text="{ Binding Path=Contacto,
              Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
        </TextBox>
    </StackPanel>
<StackPanel Orientation ="Horizontal"
          Grid.ColumnSpan="2" Grid.Row="2"
          HorizontalAlignment="Center" Margin="70,0" Width="280">
   <Button Content="Añadir" Height="30" Width="120"  Margin="20,0,0,10"
      CommandParameter ="{Binding}"
      Command="{Binding RelativeSource={RelativeSource
                               AncestorType={x:Type Window}},
          Path=DataContext.AnadirAVM}">
       </Button>
</StackPanel>



В Модель Представления :

private Persona _tempPersona;
        public Persona TempPersona
        {
            get { return _tempPersona; }
            set
            {
                if (_tempPersona != value) //Here value is null
                {
                    _tempPersona = value;
                    OnPropertyChanged("TempPersona");
                }
             }
        }

  private ICommand _anadirAVM;
  public ICommand AnadirAVM
{
get { return _anadirAVM ??
         (_anadirAVM = new RelayCommand((parameter)
                =>  AnadirAVMAction(parameter))); }
    }

private void AnadirAVMAction(object parameter)
{
        TempPersona = parameter as Persona;
        targetAVM.Crear(TempPersona);
    MessageBox.Show("Register Added");
}


Здесь параметр всегда приходит к нулю.
Заранее спасибо. Сезар

1 Ответов

Рейтинг:
11

Graeme_Grant

Трудно сказать, в чем проблема, исходя из кода, который вы опубликовали. Мы не можем видеть, правильно ли вы привязали виртуальную машину к DataContext представления, и вы не упоминаете, проверили ли отладочный вывод на наличие сломанных Привязок.

Поэтому вместо этого вот рабочий ответ, похожий на проблему, которая у вас есть выше: https://www.codeproject.com/Answers/1258762/Want-to-create-WPF-solution-in-MVVM-pattern#answer2


cesar.iriso

Спасибо за ответ. Это небольшой проект, который я готовлюсь попробовать изучить. Я загрузил его в OneDrive по этой ссылке :
https://1drv.ms/f/s!AlLQbFaWZ-ZTfjgp84azdbWq2J0
В основном имеет два проекта, Один с DAL с несколькими целями, а другой имеет меню, которое позволяет изменить DAL hot.
Конкретное представление - это диалоговое окно для добавления элементов.