Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF MVVM数据网格导航_C#_Wpf_Mvvm_Datagrid - Fatal编程技术网

C# WPF MVVM数据网格导航

C# WPF MVVM数据网格导航,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我想就这个问题寻求帮助。 我的目标是为datagrid准备导航控件,就像在WinForms中一样。 上移,下移一行,上移一行,下移一行,跳转到行(按数字) 我用xaml制作了一些解决方案: <GroupBox x:Name="gbInfo" BorderBrush="Black" BorderThickness="1" Margin="4"

我想就这个问题寻求帮助。 我的目标是为datagrid准备导航控件,就像在WinForms中一样。 上移,下移一行,上移一行,下移一行,跳转到行(按数字)

我用xaml制作了一些解决方案:

        <GroupBox x:Name="gbInfo" 
                  BorderBrush="Black" 
                  BorderThickness="1" 
                  Margin="4" 
                  Header="Info">
            <StackPanel Orientation="Horizontal" 
                        VerticalAlignment="Center">
                <Button Content="&lt;&lt;" 
                        Command="{Binding CmdMoveUpDown}" 
                        CommandParameter="Down"/>
                <TextBlock Text="{Binding InfoTable}" 
                           VerticalAlignment="Center"/>
                <Button Content="&gt;&gt;" 
                        Command="{Binding CmdMoveUpDown}" 
                        CommandParameter="Up"/>
            </StackPanel>
        </GroupBox> 
        <DataGrid x:Name="dgrForPrijem"  
                  Margin="5" 
                  ItemsSource="{Binding TabulkaPrijmu}" 
                  AutoGenerateColumns="False" 
                  AlternationCount="2"  
                  SelectionMode="Single
                  CanUserAddRows="False" 
                  SelectedItem="{Binding MySelectedItem}" 
                  IsReadOnly="True" >
        <intr:Interaction.Behaviors>
            <atch:ScrollIntoViewBahaviour/>
        </intr:Interaction.Behaviors>
        <DataGrid.Columns>
            <DataGridTextColumn x:Name ="dgtcForDpr" 
                                Header="ID Car"  
                                Width="80*" 
                                Binding="{Binding DPR}" />
            <DataGridTextColumn x:Name="dgtcForIdDpr" 
                                Header="Type of Car" 
                                Width="40*" 
                                Binding="{Binding ID_DPR}" />
            <DataGridTextColumn x:Name="dgtcForIdStav" 
                                Header="Status" 
                                Width="60*" 
                                Binding="{Binding ID_STAV}"/>
        </DataGrid.Columns>
    </DataGrid>


当你尝试排序时,问题到底是什么?我对datagrid进行排序。所有行都已排序。但当我单击第一行(在datagrid中)时,它的示例是observable集合中的30项——indexOf(SelectedItem)是30。
public class VMIndexMaterialIncome : ViewModelBase
{

    public VMIndexMaterialIncome()
    {

        TabulkaPrijmu = new ObservableCollection<TMaterialIncome>(new MaterialSupplyServices().ProvideAllMaterialIncomes());
    }

    private TMaterialIncome mySelectedItem;
    public TMaterialIncome MySelectedItem
    {
        get
        {
            return mySelectedItem;
        }
        set
        {
            mySelectedItem = value;
            InfoTable = TabulkaPrijmu.IndexOf(mySelectedItem).ToString();
            NotifyPropertyChanged("MySelectedItem");
        }
    }


    private string infoTable;

    public string InfoTable
    {
        get { return infoTable; }
        set
        {
            infoTable = value;
            NotifyPropertyChanged("InfoTable");
        }
    }



    public ICommand CmdMoveUpDown
    {
        get
        {
            return new RelayCommand<object>((object obj) =>
            {
                if (TabulkaPrijmu != null)
                {
                    int myIndex = TabulkaPrijmu.IndexOf(MySelectedItem);
                    switch(obj.ToString())
                    {
                        case "Up":
                            if (myIndex < (TabulkaPrijmu.Count - 1))
                                myIndex++;
                            break;
                        case "Down":
                            if (myIndex > 0)
                                myIndex--;
                            break;
                        default:
                            break;
                    }

                    MySelectedItem = TabulkaPrijmu[myIndex];
                }
            });
        }

    }


    private ObservableCollection<TMaterialIncome> tabulkaPrijmu;
    public ObservableCollection<TMaterialIncome> TabulkaPrijmu
    {
        get
        {
            return tabulkaPrijmu;
        }

        set
        {
            tabulkaPrijmu = value;
            NotifyPropertyChanged("TabulkaPrijmu");
        }
    }
 }
}
    public class ScrollIntoViewBahaviour : Behavior<DataGrid>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        this.AssociatedObject.SelectionChanged += new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
    }
    void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (sender is DataGrid)
        {
            DataGrid grid = (sender as DataGrid);
            if (grid.SelectedItem != null)
            {
                Action action = delegate () {
                    grid.UpdateLayout();
                    grid.ScrollIntoView(grid.SelectedItem, null);
                    grid.Focus(); // added this to make it focus to the grid
                };
                grid.Dispatcher.BeginInvoke(action);
            }
        }
    }
    protected override void OnDetaching()
    {
        base.OnDetaching();
        this.AssociatedObject.SelectionChanged -=
            new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
    }
}