【发布时间】:2014-04-04 22:04:33
【问题描述】:
我正在修改现有的 WPF 代码。代码,即 xaml 文件,使用 DataGrid 而不是 DataGridView。
我需要使用 CellValueChanged 事件而不是 CellEditEnding。谢谢。
<UserControl x:Class="myclass.view"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid x:Name="MainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<!--<RowDefinition Height="*"/>-->
</Grid.RowDefinitions>
<Grid Row="0" >
<Border Background="Transparent">
<Border.ContextMenu>
<ContextMenu>
<MenuItem Header="New Name" Command="{Binding Path=CreateNewNameCommand}"/>
<MenuItem Header="Delete Name" Command="{Binding Path=DeleteNameCommand}"/>
</ContextMenu>
</Border.ContextMenu>
<DataGrid
Name="dataGrid1"
ItemsSource="{Binding SelectedFolderPlane.FolderPlaneItems}"
SelectedItem="{Binding SelectedGridItem}"
vw:DataGridDoubleClick.DoubleClickCommand="{Binding FolderPlaneItemDoubleClickCommand}"
CellEditEnding="dataGrid1_CellEditEnding"
SelectionMode="Single"
SelectionUnit="FullRow"
AutoGenerateColumns="False"
BorderBrush="White"
GridLinesVisibility="None"
HeadersVisibility="Column"
IsReadOnly="False"
HorizontalAlignment="Left"
VerticalAlignment="Top"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch">
<DataGrid.Columns>
<DataGridTemplateColumn Width="SizeToHeader" Header="" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Width="16" Height="16" Source="{Binding MyIcon, Mode=OneTime}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="*" Binding="{Binding Name, Mode=OneTime}" Header=" Name" IsReadOnly="False" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding ToolTipText}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="SizeToHeader" Binding="{Binding LatestMod, Mode=OneTime}" Header=" Version" IsReadOnly="True"/>
<DataGridTextColumn Width="SizeToHeader" Binding="{Binding Date, Mode=OneTime}" Header=" LatestMod" IsReadOnly="True"/>
</DataGrid.Columns>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding CanShowCatContextMenu}" Value="True">
<Setter Property="ContextMenu" Value="{StaticResource Condition1ContextMenu}"/>
</DataTrigger>
<DataTrigger Binding="{Binding CanShowWFContextMenu}" Value="True">
<Setter Property="ContextMenu" Value="{StaticResource Condition1ContextMenu}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>-->
</DataGrid>
</Border>
</Grid>
</Grid>
【问题讨论】:
-
你能把“事件处理程序”放在可能绑定的属性的设置器中吗?一点点 XAML/代码可能会有所帮助。
-
您希望此代码在任何值更改时运行,还是仅在特定值更改时运行?
-
另外,如果您需要该特定事件,您可以切换到 DataGridView 吗?听起来你几乎可以修改任何你想要的东西。
-
@LordTakkera 我还是个新手,我不知道将整个基础架构更改为 DataGridView 有多么容易。但作为第一个选项,您第一个问题的答案是我希望在用户更改第一列的值时运行此代码,并且我希望也提交更改。
-
它们非常相似,但听起来您只需要修改绑定(请参阅下面的答案)。
标签: wpf events datagridview datagrid