Wpf + Prism навигация перерисовывает DataGridHeader Style?

320
02 августа 2017, 18:35

Задавал вопрос с сообществе Prism. Brian Lagunas уверяет, что это не проблема Prism.

Суть Wpf 4.5 + Prism 6.3:

CustomersView с DataGrid и реализованным фильтром в ColumnHeader:

<DataGrid.ColumnHeaderStyle>
    <Style TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                    <Grid x:Name="gridColumnHeader">
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <ContentPresenter x:Name="contentPresenterColumnHeader"/>
                        <TextBox x:Name="filter" Grid.Row="1" Height="30" Width="30"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</DataGrid.ColumnHeaderStyle>

Пользователь устанавливает фильтр в столбце Name(filter.Text = 11) и совершает навигацию для редактирования выбранного Customer в EditCustomerView. После редактирования IRegionNavigationJournal.GoBack() возвращаемся в CustomersView. Все изменения прошли, но в заголовке потерся фильтр в дефолтное значение(filter.Text = string.Empty). Перерисовывается ColumnHeaderStyle? Для эксперимента положил на CustomersView TextBox, навигация не трет TextBox.Text.

MCVE CustomersViewModel

public class CustomersViewModel : BindableBase, INavigationAware
{
    private readonly IRegionManager _regionManager;
    public CustomersViewModel(IRegionManager regionManager)
    {
        _regionManager = regionManager;
        Customers = new ObservableCollection<Customer>();
        Customers.Add(new Customer { Id = 1, Name = "Samsung", Type = 1 });
        Customers.Add(new Customer { Id = 2, Name = "Apple", Type = 1 });
    }
    private ObservableCollection<Customer> _customers;
    public ObservableCollection<Customer> Customers
    {
        get { return _customers; }
        set
        {
            SetProperty(ref _customers, value);
        }
    }
    public ICommand AddCustomerCommand { get { return new DelegateCommand<object>(ExecuteAddCustomer); } }
    private void ExecuteAddCustomer(object parameter)
    {
        _regionManager.RequestNavigate("ContentRegion", new Uri("CustomerView", UriKind.Relative));
    }
    public virtual bool IsNavigationTarget(NavigationContext navigationContext)
    {
        return true;
    }
    public virtual void OnNavigatedFrom(NavigationContext navigationContext)
    {
    }
    public virtual void OnNavigatedTo(NavigationContext navigationContext)
    {
    }
}

CustomerViewModel

public class CustomerViewModel : BindableBase, INavigationAware
{
    private readonly IRegionManager _regionManager;
    private IRegionNavigationJournal _navigationJournal;
    public CustomerViewModel(IRegionManager regionManager)
    {
        _regionManager = regionManager;
    }
    public ICommand SaveCommand { get { return new DelegateCommand<object>(ExecuteSaveCommand); } }
    private void ExecuteSaveCommand(object parameter)
    {
        if (_navigationJournal.CanGoBack)
        {
            _navigationJournal.GoBack();
        }
    }
    public virtual bool IsNavigationTarget(NavigationContext navigationContext)
    {
        return false;
    }
    public virtual void OnNavigatedFrom(NavigationContext navigationContext)
    {
    }
    public virtual void OnNavigatedTo(NavigationContext navigationContext)
    {
        _navigationJournal = navigationContext.NavigationService.Journal;
    }
}

CustomersView до навигации с установленным фильтром в Column.Name = 11:

CustomersView после навигации с удаленным фильтром:

Пример кода - PrismNavigation

Спасибо.

READ ALSO
Visual studio вылет при запуске без отладчика

Visual studio вылет при запуске без отладчика

Народ, такой очень странный вопрос, может у кого было

449
Как хранить несколько List&lt;T&gt; и передавать

Как хранить несколько List<T> и передавать

Есть список листов, которые планирую заполнять из БДКак их можно сохранить в 1 список?

342
C#. WinForms DataGridView. Заполнить колонку типа DataGridViewComboBoxColumn

C#. WinForms DataGridView. Заполнить колонку типа DataGridViewComboBoxColumn

Добрый день, есть список типов List Users;

565
Как установить Microsoft.ACE.OLEDB.12.0?

Как установить Microsoft.ACE.OLEDB.12.0?

На ПК стоит 2013 Office x32 и почему-то не могу использовать драйвер MicrosoftACE

436