gpt4 book ai didi

wpf - 使用MVVM在WPF DataGrid中显示组合框的用户友好方法

转载 作者:行者123 更新时间:2023-12-03 10:46:35 28 4
gpt4 key购买 nike

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

还需要三个!单击以使用我下面的方法展开以打开组合框的内容。

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

有人能够帮助我找到一种方法,允许用户通过单击给定行来更新条目(即单击进入文本字段进行编辑或单击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>

最佳答案

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

这将对您有帮助,我也遇到了同样的问题。

关于wpf - 使用MVVM在WPF DataGrid中显示组合框的用户友好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com