我有一个(主要)Window
包含Frame
。 Page
加载到Frame
,其中一些viewmodel作为其datacontext。
View有一些datagrids,其中一个绑定到viewmodel而另一个绑定到selected.item(这样你就可以得到一个master-details视图..)
当我显示弹出框并设置主窗口IsEnabled = false时会出现问题。当发生这种情况时,绑定到viewmodel的数据网格中的选定项目将被取消选择,当然其他数据网格选择的项目也会被取消选中。
当mainwindow.IsEnabled设置为false时,如何保留UI的“状态”?
答案 0 :(得分:1)
如果你想加入一些疯狂的混合物。在安装VS 2011 Beta(用.NET 4.5取代.NET 4.0框架)后,我创建了一个小型测试应用程序,其中 VS 2010以4.0 为目标,并且其行为再次改变为未设置SelectedItem禁用网格时为null。我不知道这是否会使它成为4.5的最终版本......
答案 1 :(得分:0)
似乎datagrid的内置行为是在数据网格被禁用时取消选择所选项目 - 我自己就验证了这一点。
但试试这个:
创建一个简单的ListView,添加一些数据,选择一个项目,单击一个按钮来禁用ListView。如果取消选择所选项,则此行为是在WPF中设计的。我认为,你无能为力。除了不禁用您的控件...
如果未取消选中所选项目,则可以在Connect中打开错误。可能需要几个月的时间才能得到回复并且修复“可能”会在几年后出现...如果这样的等待不是一个选项,那么也会在WPF工具包中发布一个错误(wpf.codeplex.com)。该工具包可能会更快更新。
答案 2 :(得分:0)
这是预期的行为,并且在设计上,但它既出乎意料又烦人,很多人认为应该将其删除。解决方法是创建一个继承自DataGrid
的新DataGrid
类,该类更改了此事件的行为。
<强> XAML 强>
<DataGrid x:Class="MyDataGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
</DataGrid>
代码背后
public partial class MyDataGrid : DataGrid
{
public MyDataGrid()
{
InitializeComponent();
}
static MyDataGrid()
{
IsEnabledProperty.OverrideMetadata(
typeof(MyDataGrid),
new FrameworkPropertyMetadata(OnIsEnabledChanged));
}
private static void OnIsEnabledChanged(
DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
d.CoerceValue(CanUserAddRowsProperty);
d.CoerceValue(CanUserDeleteRowsProperty);
CommandManager.InvalidateRequerySuggested();
}
}