用户友好的方式使用MVVM在WPF DataGrid中显示ComboBox

时间:2014-05-09 15:58:23

标签: wpf mvvm datagrid

我有一个使用MVVV的WPF应用程序;我有一个对象中的项集合,ItemsCollection中项目的一个属性是枚举,我希望用户能够使用下拉组合框或文本字段编辑ItemsCollection中项目的属性。该集合显示在DataGrid中。我很难让组合框显示并允许用户以非常简单的方式(单击,键盘输入)与它和文本框进行交互。现在,只需点击两次即可进入单元格,以便能够输入' name'我想要一次点击就可以让用户编辑值的字段。

这也需要三个!点击以使用我在下面的方法展开组合框的内容。

我已尝试过多次在堆栈溢出时找到的方法,但这是我发现的第一个解决方案,它甚至可以使用enum来填充组合框并在我的属性枚举中调用set

是否有人能够帮助我找到一种方法,允许用户只需点击一下给定的行即可更新条目(即点击进入文本字段进行编辑或点击ComboBox进行扩展我现在已经在这几个小时了,我觉得我越来越不了解这个DataGrid如何与焦点和选定的单元格/行一起工作。我在这里得到了XAML - 没有代码。

基本上:DataGrid,用户可以点击列中的单元格以选择单元格内的所有文字进行编辑,也可以点击ComboBox以使其与枚举下拉这样他们就可以选择一个值并将其应用到项目中,然后再点击

<Window.Resources>
   <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="GetEnumValues">
      <ObjectDataProvider.MethodParameters>
         <x:Type TypeName="MockItem+ValidItemsType"/>
      </ObjectDataProvider.MethodParameters>
   </ObjectDataProvider>
</Window.Resources>

<DataGrid 
   Grid.Column="0" 
   Margin="0,0,0,5" 
   SelectionMode="Single" 
   SelectedItem="{Binding Model.SelectedMockItem, UpdateSourceTrigger=LostFocus}" 
   Name="ModelItemDataGrid" 
   MaxHeight="350" 
   VerticalScrollBarVisibility="Auto"  
   ItemsSource="{Binding Model.MockObject.MockItemsCollection}" 
   Height="Auto" 
   HorizontalGridLinesBrush="#CBCBCB"  
   VerticalGridLinesBrush="#CBCBCB" 
   AutoGenerateColumns="False" 
   IsReadOnly="False" >
   <DataGrid.Columns>
      <DataGridTextColumn  Binding="{Binding Name}" Header="Name" Width="Auto"  />
      <DataGridComboBoxColumn  Width="120" ItemsSource="{Binding Source={StaticResource GetEnumValues}}" SelectedValueBinding="{Binding ValidItem}" />
      <DataGridTemplateColumn x:Name="SelectedItemColumn" Header="Valid Item Type" Width="Auto" >
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <TextBox IsReadOnly="True" Text="{Binding Path=ValidItem}" d:DataContext="{d:DesignData MockItem}" >
                  <TextBox.Style>
                     <Style TargetType="{x:Type TextBox}" >
                        <Setter Property="Background" >
                           <Setter.Value>
                              <SolidColorBrush Color="{Binding Path=ValidItem, Converter= {StaticResource MockItemValidItemToBackgroundColourConverter1}}" d:DataContext="{d:DesignData MockItem}"  />
                           </Setter.Value>
                        </Setter>
                     </Style>
                  </TextBox.Style>
               </TextBox>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
   </DataGrid.Columns>
</DataGrid>

1 个答案:

答案 0 :(得分:0)

<Style TargetType="DataGridCell">
     <Style.Triggers>
         <Trigger Property="IsMouseOver" Value="True">
             <Setter Property="IsEditing" Value="True" />
         </Trigger>
     </Style.Triggers>
 </Style>

这对你有帮助,我和你有同样的问题。