2016-01-13 4 views
0

У меня есть DataGrid для отображения коллекции MobileInfo. DataGrid настроен с SelectionUnit="FullRow". Если я нажму на любую строку, тогда она выберет всю строку, дополнительно укажет ячейку с границей, куда попала мышь.Как получить значения из DataGridTextColumn на основе KeyBinding в C#

Выбор границы осуществляется при навигации по клавиатуре, например: Left, Right, Up и Down. На основе выбора ячейки Я хочу, чтобы извлечь значения из DataGridTextColumn

Примечание: Этот вопрос Сугубо идет о Как получить значения на основе Зачет ввода (обработки параметра и извлечения значений). Но «How to Pass Cell Information from DataGrid in WPF KeyBinding?» этот вопрос рассказывает о том, как передавать информацию из пользовательского интерфейса. Здесь мне нужно получить значение Android от Paramater.

См изображение он имеет вывод на экран

Retrieve Values from DataGridTextColumn

В приведенном выше снимке экрана Андроид выбран, основываясь на клавиатуре навигации, изменения выбора соты.

Мой исходный код XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" SelectionUnit="FullRow" IsReadOnly="True"> 
    <DataGrid.InputBindings> 
     <KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding }" /> 
    </DataGrid.InputBindings> 
    <DataGrid.Columns> 
     <!--Column 1--> 
     <DataGridTextColumn Binding="{Binding MobileName}" Header="Name" /> 
     <!--Column 2--> 
     <DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" /> 
    </DataGrid.Columns> 
</DataGrid> 

Примечание: Не изменяйте SelectionUnit в DataGrid и дать ответ, используя MVVM подход

Просьба представить свое решение, как пройти в клетку информация на основе навигации по клавиатуре

C# исходный код, связанный с XAML DataGrid

public class GridViewModel 
{ 
    public ObservableCollection<MobileInfo> MobileList { get; set; } 

    public GridViewModel() 
    { 
     MobileList = new ObservableCollection<MobileInfo>(); 
     MobileList.Add(new MobileInfo { MobileName = "iPhone", MobileOS = "iOS" }); 
     MobileList.Add(new MobileInfo { MobileName = "Xperia", MobileOS = "Android" }); 
     MobileList.Add(new MobileInfo { MobileName = "Lumina", MobileOS = "Windows" }); 
    } 
} 

public class MobileInfo 
{ 
    public string MobileName { get; set; } 
    public string MobileOS { get; set; } 
} 

ответ

0

Вы можете сохранить выбранный-элемент из ваших DataGrid с:

<DataGrid AutoGenerateColumns="False" SelectionUnit="FullRow" IsReadOnly="True" 
      ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" 
      SelectedItem="{Binding SelectedMobile, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 

И в вашей ViewModel у вас есть:

private MobileInfo selectedMobileInfo; 
public MobileInfo SelectedMobileInfo 
{ 
    get{ return selectedMobileInfo; } 
    set 
    { 
     selectedMobileInfo = value; 
     OnPropertyChanged(); 
    } 
} 

Если вы хотите, чтобы все SelectedItems вы можете либо передать их как командный параметр для вашей модели ViewModel:

<KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding ElementName=mobileListDataGrid, Path=SelectedItems}" /> 

На вашем DataGrid вы должны установить x:Name="mobileListDataGrid" для этого подхода к работе.

В противном случае вы можете связать выбранные элементы с прикрепленным свойством. Таким образом я объясню, если вы хотите.

+0

Он выберет только одну строку. Но мое требование состоит в том, чтобы перетащить опору как HTML-таблицу, она должна выбирать содержимое как HTML-таблицу. –