0

当我在应用程序的 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。

4

1 回答 1

0

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

您可以尝试停止这种行为,或者更简单地备份您的 DP 中的最后一个 SelectedItem ,该属性在PropertyChangedCallback中不为空。

于 2012-04-26T11:28:16.500 回答