【问题标题】:Why does a tabchange change a bound value为什么 tabchange 会更改绑定值
【发布时间】:2012-04-26 08:19:00
【问题描述】:

当我在应用程序的 TabControl 中使用我编写的 UserControl 时,我遇到了问题。 TabControl 是 DataBound 并使用模板。在更改当前选项卡(每次鼠标单击)时,绑定属性设置为空。我想将当前选定的项目保留在 ViewModel 中。如果我使用 DataGrid 或 ListBox,一切都会按预期工作。 ViewModel 的 SelectedItem-Property 未设置为 null。

也许我必须设置不同的 DependencyProperty?涉及的属性定义如下:

SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(object), typeof(BusinessListEditor), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(BusinessListEditor), new FrameworkPropertyMetadata(null));

此属性直接绑定到 UserControl 内的 DataGrid。

<DataGrid x:Name="dgDataGrid"
              ItemsSource="{Binding ItemsSource,
                                    ElementName=ucBusinessListEditor}"
              SelectedItem="{Binding SelectedItem,
                                     ElementName=ucBusinessListEditor}"
              Style="{Binding DataGridStyle,
                              ElementName=ucBusinessListEditor}" />

如何防止 SelectedItem-Property 在 SelectedTab-Change 上发生更改的问题。我试图分析这一点,但并不完全理解这个案例。不知何故,SelectedItemChanged 来自 DataGrid 的 ItemsChanged。

【问题讨论】:

  • 您是否尝试将SelectedItem 的绑定设置为Mode=OneWayToSource
  • 现在试过了,没用。而且我无法从 ViewModel 设置 SelectedItem ...
  • 抱歉,只是枚举值错误!您应该使用 Mode=OneWay
  • 但是当DataGrid中的选中项发生变化时它不会更新,或者?​​
  • 没有。我以为你不想要它。

标签: wpf data-binding datagrid tabcontrol


【解决方案1】:

如果您更改当前选项卡,旧选项卡将从可视树中卸载。这意味着没有DataGrid,没有SelectedItem

您可以尝试 stop this behaviour 或者更简单地备份您的 DP 中的最后一个 SelectedItem,它在 PropertyChangedCallback 中不为空。

【讨论】:

  • 那么为什么我使用DataGrid或ListBox时ViewModel的SelectedItem不设置为null,但如果我使用BusinessListEditor则设置为null?
  • 我不能说。我不知道您的 BusinessListEditor 和您的应用程序的结构。
  • 对于上面显示的这个属性,不存在额外的逻辑。就是这两个属性加上里面的DataGrid。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2023-03-29
  • 2014-03-26
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多