2016-10-06 8 views
-1

Я пытаюсь создать DTO для хранения конфигурации программного обеспечения, но я застрял, потому что мое представление не отправляет данные в мою ViewModel, а также в мой DTO. Мне нужно передать 2 текстовых поля и 3 combobox в мой DTO, но с использованием этого кода значения всегда пусты.Binding model from view wpf C#

Мои ViewModel:

public class ViewModelProcessamentoArquivo : ViewModelBase 
{ 
private PesquisaConfiguracao pesquisaConfiguracao; 

public PesquisaConfiguracao PesquisaConfiguracao 
     { 
      get { return pesquisaConfiguracao; } 
      set 
      { 
       pesquisaConfiguracao = value; 

       base.OnPropertyChanged("PesquisaConfiguracao"); 
      } 
     } 
} 

Мой DTO/Модель

public class PesquisaConfiguracao 
    { 
     public string ArquivoOrigem { get; set; } 
     public string ArquivoDestino { get; set; } 
     public string TipoPesquisa { get; set; } 
     public string PesquisaVeicular { get; set; } 
     public string PesquisaCrediticia { get; set; } 
    } 

И на мой взгляд, как это.

<TextBox Name="txtBuscarArquivoOrigem" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Height="30" Margin="10, 0" Text="{Binding PesquisaConfiguracao.ArquivoOrigem}" /> 

<TextBox x:Name="txtBuscarArquivoDestino" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3" Height="30" Margin="10, 0" Text="{Binding PesquisaConfiguracao.ArquivoDestino}" IsEnabled="false" /> 

... 

Вы, ребята, знаете, почему это происходит? Я использовал что-то подобное в моем другом проекте и отлично работал. Также, если у вас есть какой-либо другой способ устранить эту проблему, прокомментируйте!

+1

Был 'PesquisaConfiguracao' когда инициализируется? –

+1

Я думаю, что вы должны внедрить INotifyPropertyChanged на PesquisaConfiguracao –

+0

@EdPlunkett согласился .. May pesquisaConfiguracao = new PesquisaConfiguracao(). –

ответ

0

Первый UpdateSourceTrigger PropertyChanged, таким образом цель (вид) обновит исходный объект при каждом изменении:

<TextBox Name="txtBuscarArquivoOrigem" Height="30" Text="{Binding PesquisaConfiguracao.ArquivoOrigem, UpdateSourceTrigger=PropertyChanged}" /> 

Затем осуществить в источнике объекта в INotifyPropertyChange интерфейс на его свойства для того, чтобы обновить вид, когда значение изменилось:

private string _arquivoOrigem; 

    public string ArquivoOrigem 
    { 
     get 
     { 
      return _arquivoOrigem; 
     } 
     set 
     { 
      _arquivoOrigem = value; 
      OnPropertyChanged("ArquivoOrigem"); 
     } 
    } 

Положите BreakPoint в собственность сеттер и она будет ломаться там, когда вы измените значение в TextBox зрения.

Если это не работает для вас, наверное, забыли установить свои DataContext вашему ViewModel:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    Title="MainWindow" 
    DataContext="{StaticResource MainViewModel}"> 

Или не инициализировать исходный объект:

public MainViewModel() 
    { 
     pesquisaConfiguracao = new PesquisaConfiguracao 
     { 
      ArquivoDestino = "aaa", 
      ArquivoOrigem = "bbb", 
      PesquisaCrediticia = "ccc", 
      PesquisaVeicular = "dddd", 
      TipoPesquisa = "eee" 
     }; 
    }