WFP dxg datagrid, выберите первый ряд автоматически с фокусом - PullRequest
0 голосов
/ 05 декабря 2018
<helpers:CustomGrid Grid.Row="0"
                    Margin="0"
                    AutoGenerateColumns="None"
                    x:Name="DataGrid"
                    IsTabStop="False"
                    ItemsSource="{Binding Orders}"
                    CurrentItem="{Binding CurrentOrder}">

         <helpers:CustomGrid.View>
                    <dxg:TableView Name="TView"
                                   AllowResizing="True"
                                   NavigationStyle="Cell"
                                   ShowFixedTotalSummary="True" 
                                   AllowLeaveFocusOnTab="True" 
                                   HorizontalScrollbarVisibility="Auto" 
                                   VerticalScrollbarVisibility="Auto"/>
          </helpers:CustomGrid.View>

Я не могу найти какое-либо свойство для автоматической установки строки, даже пробовал в моей настраиваемой сетке:

public CustomGrid()
{
     ItemsSourceChanged += OnItemsSourceChanged;
}

private void OnItemsSourceChanged(object sender, ItemsSourceChangedEventArgs e)
{

}

Orders - это ObservableCollection.

Но оно выигралоне ударил, потому что я добавляю диапазон в свою коллекцию ObservableCollection, а не создаю новую (и вот как я этого хочу)

Есть предложения, как это сделать?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Если вы хотите иметь фокусированную строку при визуализации GridControl, вы можете установить для DataControlBase.AllowInitiallyFocusedRow значение true.

<helpers:CustomGrid Grid.Row="0"
                    Margin="0"
                    AutoGenerateColumns="None"
                    x:Name="DataGrid"
                    IsTabStop="False"
                    ItemsSource="{Binding Orders}"
                    CurrentItem="{Binding CurrentOrder}"
                    AllowInitiallyFocusedRow="True">

Если вы хотите получить первыйСтрока, выбранная в любое время, когда GridControl фокусируется, вы можете сделать это с помощью пользовательской реализации TableView (или Поведения).

public class CustomTableView : TableView
{
    protected override void OnGotFocus(RoutedEventArgs e)
    {
        base.OnGotFocus(e);

        if (FocusedRowHandle < 0)
            FocusedRowHandle = (DataControl as GridControl).GetRowHandleByListIndex(0);
    }
}
0 голосов
/ 05 декабря 2018

Все зависит, но ... Вы можете зарегистрироваться в событии Loaded пользовательского элемента управления, который содержит вашу dataGrid, а затем выполнить BeginInvoke(), который устанавливает CurrentOrder для модели представления, а затем снова выдать еще один BeginInvoke()установить фокус.

Пример:

public CustomGrid()
{
    Loaded += CustomGrid_Loaded;
}

    void CustomGrid_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        Dispatcher.BeginInvoke(new System.Action(() =>
       {

           var vm = DataContext as PageViewModel;
           vm.CurrentOrder = vm.Orders[0];

           //now set focus..
           dataGrid.Focus();   //sometimes you may need to issue another BeginInvoke() when you hijack the event model
...