我正在为我的应用程序使用WPF和PRISM框架.我正在使用的模式是MVVM(Model - View - ViewModel),我试图将ViewLeft中的MouseLeftButtonUp事件从ViewModel引入ViewModel(因此事件将根据MVVM规则).现在我有这个:
View.xaml:
<DataGrid x:Name="employeeGrid" Height="250" Margin="25,0,10,0" ItemsSource="{Binding DetacheringenEmployeesModel}" IsReadOnly="True" ColumnHeaderStyle="{DynamicResource CustomColumnHeader}" AutoGenerateColumns="False" RowHeight="30">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonUp">
<i:InvokeCommandAction Command="{Binding EmployeeGrid_MouseLeftButtonUp}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)
View.xaml.cs(代码隐藏):
public partial class UC1001_DashBoardConsultants_View
{
public UC1001_DashBoardConsultants_View(UC1001_DashboardConsultantViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
Run Code Online (Sandbox Code Playgroud)
ViewModel.cs:
public void EmployeeGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
// insert logic here
}
Run Code Online (Sandbox Code Playgroud)
主要的想法是,当我点击DataGrid中的一个单元格时,事件将会触发.我首先在后面的代码中尝试了它,并且它有效.我到目前为止使用EventTriggers,但是当我调试并单击一个单元格时,我的调试器没有进入该方法.
有谁知道如何解决这个问题?提前致谢!
PS:当我这样做时,它是否也与(对象发送者)参数一起使用?因为我需要在我的ViewModel中使用DataGrid来获取我刚刚点击的ActiveCell.
编辑:
事件绑定与Command一起工作!
我在我的DataGrid中有这个:
<DataGridTextColumn Header="Okt" Width="*" x:Name="test" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Tag" Value="{Binding Months[9].AgreementID}"/>
Run Code Online (Sandbox Code Playgroud)
如何将Tag属性绑定到ViewModel?我知道它已经从ViewModel绑定了,但是你可以看到值来自一个数组/列表和每列的值是不同的.
我需要使用Shell32解压缩我的应用程序中的一些文件.现在,我 srcFolder.CopyHere(destFolder.Items())用来实现这一目标.但是,我的下一行代码需要新制作的ZIP文件.但由于该CopyHere方法是Async,我如何检查它何时完成?现在我使用一个Thread.Sleep大约500毫秒,这足以让我的电脑完成创建ZIP文件,但它不是很好的代码imo.
有任何想法吗?
如有必要,可以提供更多信息/代码.
我想要以下功能:我有一个数据网格,当我用鼠标指针移动到一个单元格时,我会让我的程序显示一个包含信息的弹出屏幕.当我的鼠标离开细胞时,显然我希望弹出窗口消失.我希望我只能在XAML代码中执行此操作.
这是我在XAML中的弹出窗口:
<Popup x:Name="_popup_agreementDetails" Placement="Center" AllowsTransparency="True"
HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2" Margin="46,333,102,172" Grid.Row="2" IsOpen="{Binding IsChecked, ElementName=button}">
<my:UC1001_AgreementDetails_View Background="#FFF" Opacity="0.88" />
</Popup>
Run Code Online (Sandbox Code Playgroud)
如您所见,弹出窗口显示我制作的用户控件.这是我的datagrid:
<DataGrid x:Name="employeeGrid" Height="250" Margin="25,0,10,0" ColumnHeaderStyle="{DynamicResource CustomColumnHeader}">
<DataGrid.Columns>
<DataGridTextColumn Header="Naam" Width="150"/>
<DataGridTextColumn Header="Januari" Width="*"/>
<DataGridTextColumn Header="Februari" Width="*"/>
<DataGridTextColumn Header="Maart" Width="*"/>
<DataGridTextColumn Header="April" Width="*"/>
<DataGridTextColumn Header="Mei" Width="*"/>
<DataGridTextColumn Header="Juni" Width="*"/>
<DataGridTextColumn Header="Juli" Width="*"/>
<DataGridTextColumn Header="Augustus" Width="*"/>
<DataGridTextColumn Header="September" Width="*"/>
<DataGridTextColumn Header="Oktober" Width="*"/>
<DataGridTextColumn Header="November" Width="*"/>
<DataGridTextColumn Header="December" Width="*"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我读了一些关于触发器和东西的东西来显示弹出窗口,但我不知道如何在datagrid单元格上实现它.弹出窗口应显示在每个单元格上.弹出窗口上显示的信息取决于悬停的单元格.
有谁知道如何在XAML中执行此操作?
我已经编写了一个转换器类(实现IValueConverter),该类将数据库(例如“ CTY”)中的代码转换为更加用户友好的描述(例如“ City”)。我想在XCeed WPF Datagridcontrol中的单个列上使用转换器,但是我不知道必须将Converter设置为哪个属性。我也尝试使用一种样式将其附加到DataCell上,但是它不能正常工作,并且我认为也是没有必要的,因为转换器应仅应用于一列,而不是应用于每个单元格。
这些列也是自动生成的,因此,如果我可以在运行时应用它们,那将非常棒!
我不知道我必须将该转换器应用到该列的哪个属性(Xceed列没有“ Binding”属性。你们有什么建议吗?
如果需要,可以提供更多示例或代码。希望我的问题对您有所帮助。
编辑:
这是我在XAML文件中使用的东西:
<utils:BudgettaireEntiteitConverter x:Key="BudgettaireEntiteitConverter" />
<xcdg:DataGridCollectionViewSource x:Key="GridViewSourceDefault"
Source="{Binding Converter={StaticResource BudgettaireEntiteitConverter}}">
<xcdg:DataGridCollectionViewSource.DetailDescriptions>
<lc:ActieOverzichtBudgettenDescription
RelationName="Budgetten"
AutoCreateDetailDescriptions="False"
AutoCreateForeignKeyDescriptions="False"
AutoCreateItemProperties="True"
Title="Budgetten" >
<lc:ActieOverzichtBudgettenDescription.StatFunctions>
<xcdg:SumFunction ResultPropertyName="SumOfBedragInBudget"
SourcePropertyName="BedragInBudget" />
<xcdg:SumFunction ResultPropertyName="SumOfBedragInAfwachting"
SourcePropertyName="BedragInAfwachting" />
</lc:ActieOverzichtBudgettenDescription.StatFunctions>
<lc:ActieOverzichtBudgettenDescription.DetailDescriptions>
<lc:ActieBudgetRegistratieSleutelsDescription RelationName="RegistratieSleutels"
AutoCreateDetailDescriptions="False"
AutoCreateForeignKeyDescriptions="False"
AutoCreateItemProperties="True"
Title="Registratiesleutels" />
</lc:ActieOverzichtBudgettenDescription.DetailDescriptions>
</lc:ActieOverzichtBudgettenDescription>
</xcdg:DataGridCollectionViewSource.DetailDescriptions>
</xcdg:DataGridCollectionViewSource>
<xcdg:DataGridControl x:Name="lsvActies"
TargetUpdated="OnListTargetUpdated"
ItemsSourceName="Acties"
IsRefreshCommandEnabled="False"
rf:XceedGridService.LoadUserSettings="True"
rf:XceedGridService.SettingsKeyName="ActieOverzichtGridKey"
rf:XceedGridService.ItemContextMenu="{StaticResource ActieContextMenu}">
<xcdg:DataGridControl.CommandBindings>
<CommandBinding Command="Delete" Executed="ExecuteDeleteItem" CanExecute="CanExecuteDeleteItem"/>
</xcdg:DataGridControl.CommandBindings>
</xcdg:DataGridControl>
Run Code Online (Sandbox Code Playgroud)
这是我的转换器:
Public Class BudgettaireEntiteitConverter
Implements IValueConverter
Private hs As Hashtable = FillHashTable()
Public Function Convert(value …Run Code Online (Sandbox Code Playgroud)