【问题标题】:IntegerUpDown Binding IssueIntegerUpDown 绑定问题
【发布时间】:2012-03-21 16:37:21
【问题描述】:

在我的 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>

它似乎只有一种方式绑定。最初在我的视图模型中设置的值显示在控件中,但是当我更改控件的值时,它不会更新视图模型。我确保更改控件的值,然后按 Tab 或 Enter 以失去焦点并触发更新,但仍然没有运气。我的视图模型非常简单,这里是 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 “忽略”,但在尝试后同样的问题仍然存在。 SelectedQuantity 不是我的模型对象中的属性。也许它与DataGridTemplateColumns有关?

编辑 似乎没有任何东西实际上与数据网格正确绑定(尽管视图中的其他控件已正确绑定):(这就是我填充 ObservableCollection&lt;ProductViewModel&gt; 对象的方式

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&lt;ProductViewModel&gt; 对象,就像 ItemsSource="{Binding SearchResults}" 我在 DataGrid 中正确地看到了这些项目,只是更改没有反映在视图模型中。 SelectedQuantity 是 ProductViewModel 中的一个属性。

【问题讨论】:

  • 是否有集合绑定到 DataGrid?如果是这样,SelectedQuantity 是绑定集合中对象的成员,还是在托管数据网格的窗口/控件的视图模型中?

标签: wpf data-binding mvvm wpftoolkit


【解决方案1】:

我认为您正在混合绑定。数据网格可能绑定到 ObservableCollection(如果不是,我会从那里开始)。行级别的项目上下文是单个对象,它是应该具有 SelectedQuantity 属性以便 XAML 工作的对象。如果它在您的包含视图模型上,这将不起作用,因为多行将绑定到同一个属性,我认为它不会给您带来您想要的效果。

尝试添加一些代码以查看退出行后是否正在发送值:

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

【讨论】:

  • 在 View 构造函数中,我将 this.DataContext 设置为我的 ViewModel。 ViewModel 包含一个 ObservableCollection,然后我将其绑定到 DataGrid ItemsSource,如 ItemsSource="{Binding SearchResults}"。我确实看到数据网格中填充了数据,更改只是没有反映在视图模型中
  • Thie line 'Value="{Binding SelectedQuantity, Mode=TwoWay}"' 暗示 SelectedQuantity 在 ProductViewModel 上。是它存在的地方还是同一视图模型上的 SelectedQuantity 属性包含“SearchResults”作为属性?
  • 您是否尝试将“UpdateSourceTrigger=PropertyChanged”添加到值绑定?
  • 我对 Interaction.Triggers 不太熟悉,但我已经将它添加到 DataGrid 中,然后使用了这个 在我的 ProductViewModel 上创建了 Submit 函数......它永远不会被击中
猜你喜欢
  • 2018-11-22
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
相关资源
最近更新 更多