Сетка данных Выбранный элемент потерян в окне. IsEnabled = false - PullRequest
4 голосов
/ 22 сентября 2010

У меня есть (основной) Window, содержащий Frame.Page загружается в этот Frame, с некоторой моделью представления в качестве его текста данных.

В представлении есть несколько таблиц данных, где один связан с моделью представления, а другой - с selected.item (так что вы получаете представление основных данных ..)

проблемапроисходит, когда я отображаю всплывающее окно и устанавливаю главное окно IsEnabled = false.Когда это происходит, выбранный элемент из сетки данных, привязанной к модели представления, становится невыбранным, и, конечно, другие выбранные элементы сетки данных также не выбираются.

Как сохранить «состояние» пользовательского интерфейса, когда для моего mainwindow.IsEnabled установлено значение false?

Ответы [ 3 ]

1 голос
/ 17 мая 2012

Если вы хотите добавить немного безумия в смесь. После установки VS 2011 Beta (которая заменяет .NET 4.0 framework на .NET 4.5) я создал небольшое тестовое приложение с VS 2010, которое нацелено на 4.0 , и поведение этого снова изменилось, чтобы не устанавливать SelectedItem = ноль, когда сетка отключена. Я не знаю, превратится ли это в финальную версию 4.5 или нет ....

0 голосов
/ 16 июля 2011

Это ожидаемое поведение, и по замыслу, но оно и неожиданно, и раздражает, и многие считают, что его следует удалить.Временное решение: создать новый класс 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();
  }
}

См. http://wpf.codeplex.com/workitem/13022

0 голосов
/ 24 сентября 2010

Кажется, встроенное поведение сетки данных состоит в том, чтобы отменить выбор выбранного элемента, когда сетка данных отключена - просто подтвердите это самостоятельно.

Но попробуйте это:

Создайте упрощенный ListView, добавьте некоторые данные, выберите элемент, нажмите кнопку, чтобы отключить ListView. Если выбранный элемент отменяется, то такое поведение предусмотрено в WPF. Думаю, вы мало что можете с этим поделать. Кроме того, чтобы не отключить ваши элементы управления ...

Если выбранный элемент не отменен, вы можете открыть ошибку в Connect. Чтобы получить ответ, могут потребоваться месяцы, а через пару лет может прийти исправление «возможно» ... Если такое ожидание не подходит, также опубликуйте сообщение об ошибке в наборе инструментов WPF (wpf.codeplex.com). Инструментарий может быть обновлен раньше.

...