小编Jel*_*ghs的帖子

将事件绑定到ViewModel

我正在为我的应用程序使用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绑定了,但是你可以看到值来自一个数组/列表和每列的值是不同的.

c# wpf events xaml mvvm

7
推荐指数
1
解决办法
1万
查看次数

如何检查Shell32.Folder.CopyHere()何时完成

我需要使用Shell32解压缩我的应用程序中的一些文件.现在,我 srcFolder.CopyHere(destFolder.Items())用来实现这一目标.但是,我的下一行代码需要新制作的ZIP文件.但由于该CopyHere方法是Async,我如何检查它何时完成?现在我使用一个Thread.Sleep大约500毫秒,这足以让我的电脑完成创建ZIP文件,但它不是很好的代码imo.

有任何想法吗?

如有必要,可以提供更多信息/代码.

vb.net zip asynchronous shell32

7
推荐指数
2
解决办法
7414
查看次数

WPF在DataGrid单元格MouseOver上显示弹出窗口

我想要以下功能:我有一个数据网格,当我用鼠标指针移动到一个单元格时,我会让我的程序显示一个包含信息的弹出屏幕.当我的鼠标离开细胞时,显然我希望弹出窗口消失.我希望我只能在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中执行此操作?

wpf xaml datagrid popup mouseover

5
推荐指数
1
解决办法
8326
查看次数

在DataGrid列上应用ValueConverter

我已经编写了一个转换器类(实现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)

vb.net wpf xaml ivalueconverter xceed-datagrid

1
推荐指数
1
解决办法
4045
查看次数