WPF > 구현 : DataGrid 행을 선택하고 두 번 클릭하면 레코드를 가져옵니다 (일부 실패) | "/"를 사용하여 현재 검색

운영 환경
Windows 8.1 Pro (64bit)
Microsoft Visual Studio 2017 Community

개요



다음을 포함합니다.
  • ICommand 사용
  • DataGrid 행 선택
  • 더블 클릭시에 선택된 행의 정보를 표시

  • 참고



    h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 3876662 / wpf-datagi d-koman d bin g-o-a-do b-c-ck ㅜㅜㅜㅜㅜ

    answered Nov 6 '13 at 9:32
    Mizipzor
    를 참고로 했습니다.

    "/"를 사용하는 점이 그렇습니다.

    is the/in your {Binding CollectionView/} on purpose? – Maslow Sep 23 '15 at 17:41

    Yes, that makes it bind to the current item. Which when used with IsSynchronizedWithCurrentItem means the selected item. Here's a blog post. – Mizipzor Oct 1 '15 at 9:48

    code



    MainWindow.xaml
    <Window x:Class="_170702_t1630_doubleClickBinding.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:_170702_t1630_doubleClickBinding"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Window.DataContext>
            <local:ViewModel/>
        </Window.DataContext>
        <Grid>
            <DataGrid x:Name="dataGrid1" 
                      ItemsSource="{Binding myList}"
                      IsSynchronizedWithCurrentItem="True">
                <DataGrid.InputBindings>
                    <MouseBinding MouseAction="LeftDoubleClick"
                                  Command="{Binding DoubleClickCommand}"
                                  CommandParameter="{Binding myList/}"/>
                </DataGrid.InputBindings>
            </DataGrid>
        </Grid>
    </Window>
    

    MainWindow.xaml.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace _170702_t1630_doubleClickBinding
    {
        /// <summary>
        /// MainWindow.xaml の相互作用ロジック
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
        }
    }
    

    TestItem.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _170702_t1630_doubleClickBinding
    {
        class TestItem
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
            public string Gender { get; set; }
        }
    }
    

    ViewModel.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    //
    using System.Collections.ObjectModel;
    using System.Windows.Input;
    using System.Windows;
    using System.Data;
    using System.Data.SqlClient;
    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    
    namespace _170702_t1630_doubleClickBinding
    {
        class ViewModel : ViewModelBase
        {
            // コンストラクタ
            public ViewModel()
            {
                DoubleClickCommand = CreateCommand(param => MyDoubleClickCommand(param));
                //
                myList = new ObservableCollection<TestItem>();
                myList.Add( new TestItem { Id = 1, Name = "7of9", Age = 30, Gender = "Female"});
                myList.Add( new TestItem { Id = 2, Name = "Janeway", Age = 50, Gender = "Female" });
                myList.Add( new TestItem { Id = 3, Name = "Chakotay", Age = 40, Gender = "Female" });
            }
    
            public ObservableCollection<TestItem> myList { get; set; }
    
            public ICommand DoubleClickCommand { get; private set; }
    
            public void MyDoubleClickCommand(object param)
            {
                if (param == null)
                {
                    return;
                }
                var clc = (TestItem)param;
                MessageBox.Show("Double click on " + clc.Name);
            }
    
        }
    }
    

    ViewModelBase.cs는 @hugo-sb 님의 코드를 사용하고 있습니다.
    감사합니다.

    실행


  • Chakotay 행 선택
  • 오른쪽을 두 번 클릭합니다.


  • Chakotay의 표시가 된다.


    사실은 다른 일기



    아래와 같은 점에서 코레자나이.
  • 항목이 기재되어 있는 좌측을 더블 클릭하고 싶다
  • 하지만 그렇게하면 편집 화면이됩니다.
  • Readonly로 하면 좋을까

  • 행을 선택하지 않고, 갑자기 더블 클릭하고 싶다
  • 행 선택하지 않으면 7of9가 된다


  • IsReadOnly="True"



    DataGrid의 IsReadOnly를 True로 해 보았다.

    행을 선택하지 않고 항목이 나열된 열을 두 번 클릭하면 해당 행의 항목이 표시됩니다.

    항목이 기재되어 있지 않은 우측의 열의 더블 클릭에서는 7of9가 된다.

    좋은 웹페이지 즐겨찾기