Проблема привязки IntegerUpDown - PullRequest
2 голосов
/ 21 марта 2012

В моем приложении WPF у меня есть сетка данных с элементом управления IntegerUpDown, отображаемым в столбце, и его привязка к свойству в моей модели представления:

<DataGridTemplateColumn Header="Qty">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <toolkit:IntegerUpDown Minimum="1" Maximum="999" Value="{Binding SelectedQuantity, Mode=TwoWay}" Increment="1" HorizontalAlignment="Left" Margin="0,0,0,0" Name="integerUpDown1" VerticalAlignment="Top" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Похоже, что это только 1 способ связывания. Значение, изначально установленное в моей модели представления, отображается в элементе управления, но когда я изменяю значение элемента управления, оно не обновляет модель представления. Я удостоверился, что изменил значение элемента управления, затем нажми вкладку или ввод, чтобы потерять фокус и запустить обновление, но все равно не повезло. Моя модель представления довольно проста, и вот свойство SelectedQuantity

public int SelectedQuantity
{
    get
    {
        return _selectedQuantity;
    }
    set
    {
        if (value != _selectedQuantity)
        {
            _selectedQuantity = value;
            OnPropertyChanged("SelectedQuantity");
        }
    }
}
private int _selectedQuantity;

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string property)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(property));
    }
}

Может, это как-то связано с Automapper? Я использую Automapper для сопоставления моей модели с моей моделью представления. Сначала я подумал, что, возможно, мне нужно использовать Automappers "Ignore" для этого свойства, но после попытки решить эту проблему не удалось. SelectedQuantity не является свойством в моем объекте модели. Может быть, это как-то связано с DataGridTemplateColumns?

Редактировать Похоже, что на самом деле ничто не связано правильно с сеткой данных (хотя другие элементы управления в представлении связаны правильно) :( Вот как я заполняю свой ObservableCollection<ProductViewModel> объект

public void Search()
{
    _viewModel.SearchResults.Clear();
    List<ProductViewModel> searchResults = Mapper.Map<List<Product>, List<ProductViewModel>>(_productService.SearchProducts(_viewModel.SearchValue));

    foreach (ProductViewModel pvm in searchResults)
    {
        _viewModel.SearchResults.Add(pvm);
    }
}

Редактировать 2:

Моя DataGrid привязана к объекту ObservableCollection<ProductViewModel> следующим образом: ItemsSource="{Binding SearchResults}" Я правильно вижу элементы в DataGrid, изменения просто не отражаются в модели представления. SelectedQuantity - это свойство в ProductViewModel.

1 Ответ

3 голосов
/ 21 марта 2012

Я думаю, что вы смешиваете привязки.Сетка данных, вероятно, связана с коллекцией ObservableCollection (если нет, я бы начала с нее).Контекст элемента на уровне строки - это отдельный объект, который должен иметь свойство SelectedQuantity, чтобы ваш XAML работал.Если он находится в вашей модели представления, это не будет работать, так как несколько строк будут привязаны к одному и тому же свойству, и я не думаю, что это даст вам эффект, который вы ищете.проверьте, отправляется ли значение после выхода из строки:

<b:Interaction.Triggers>
    <b:EventTrigger EventName="RowEditEnding">
        <b:InvokeCommandAction  Command="{Binding RowEditEndingCommand}" CommandParameter="{Binding }"/>
    </b:EventTrigger>
 </b:Interaction.Triggers>
...