zoukankan      html  css  js  c++  java
  • WPF 事件实现MVVM中的Command绑定

    1. 在ViewModel中弹出消息提示框,需要添加下面的代码块:

        <dxmvvm:Interaction.Behaviors>
            <dx:DXMessageBoxService />
        </dxmvvm:Interaction.Behaviors>

    在ViewModel中的调用方式是:

            public virtual void ShowRowDetails(SampleData obj)
            {
                MessageBoxService.Show(obj.ToString(), "Row Details");
            }

    2. 将鼠标双击事件绑定到ViewModel中的 ShowRowDetails 的方式是:

    <dxmvvm:Interaction.Behaviors>
        <dxmvvm:EventToCommand EventName="MouseDoubleClick"
                       Command="{Binding ShowRowDetailsCommand}"
                       PassEventArgsToCommand="True">
            <dxmvvm:EventToCommand.EventArgsConverter>
                <dx:EventArgsToDataRowConverter/>
            </dxmvvm:EventToCommand.EventArgsConverter>
        </dxmvvm:EventToCommand>
    </dxmvvm:Interaction.Behaviors>

    注意: 在xaml 代码中的命令带Command后缀,在ViewModel中不需要。

    <UserControl x:Class="EventToCommandExample.Views.MainView"
                 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"
                 xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
                 xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
                  xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
                 xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
                 xmlns:ViewModels="clr-namespace:EventToCommandExample.ViewModels"  
                 xmlns:localConverters="clr-namespace:EventToCommandExample.Converters"
                 mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="600"
                 DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModels:MainViewModel}}">
        <dxmvvm:Interaction.Behaviors>
            <dx:DXMessageBoxService />
        </dxmvvm:Interaction.Behaviors>
        <Grid>
            <Grid.Resources>
                <localConverters:ReviewResultRowBackColorConverter x:Key="reviewResultRowBackColorConverter"></localConverters:ReviewResultRowBackColorConverter>
                <localConverters:String2BoolConverter x:Key="string2BoolConverter"></localConverters:String2BoolConverter>
                <Style x:Key="optimizedRowStyle" TargetType="{x:Type dxg:RowControl}">
                    <Setter Property="Background" Value="{Binding Row.Mandatory, Converter={StaticResource reviewResultRowBackColorConverter}}"/>
                </Style>
                <Style x:Key="barButtonItemStyle" TargetType="dxb:BarButtonItem">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Row.Row.Mandatory,Converter={StaticResource string2BoolConverter}}" Value="false">
                            <Setter Property="IsVisible" Value="False"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Resources>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <dx:DXTabControl>
                <dxmvvm:Interaction.Behaviors>
                    <dxmvvm:EventToCommand EventName="SelectionChanged"
                                               Command="{Binding SelectedTabIndexChangedCommand}"
                                               PassEventArgsToCommand="True">
                    </dxmvvm:EventToCommand>
                </dxmvvm:Interaction.Behaviors>
                <dx:DXTabItem Header="Test">
                    <dxg:GridControl ItemsSource="{Binding GridData}" AutoGenerateColumns="AddNew">
                        <dxg:GridControl.Columns>
                            <dxg:GridColumn Header="ID" FieldName="ID"></dxg:GridColumn>
                            <dxg:GridColumn Header="Text" FieldName="Text"></dxg:GridColumn>
                            <dxg:GridColumn Header="Value" FieldName="Value"></dxg:GridColumn>
                            <dxg:GridColumn Header="Mandatory" FieldName="Mandatory"></dxg:GridColumn>
                        </dxg:GridControl.Columns>
                        <dxg:GridControl.View>
                            <dxg:TableView x:Name="tvTable" RowStyle="{StaticResource optimizedRowStyle}">
                                <dxg:TableView.RowCellMenuCustomizations>
                                    <dxb:BarButtonItem Content="DB Owner"
                                                       Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataHeaderCommand, RelativeSource={RelativeSource Self}}"
                                               CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}"
                                                       dxb:BarManager.ShowGlyphsInPopupMenus="False"
                                                       Style="{StaticResource barButtonItemStyle}">
                                    </dxb:BarButtonItem>
                                    <dxb:BarButtonItem Content="Table Name" IsVisible="{Binding Row.Row.Mandatory,Converter={StaticResource string2BoolConverter}}"
                                                       Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataHeaderCommand, RelativeSource={RelativeSource Self}}"
                                               CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}">
                                    </dxb:BarButtonItem>
                                    <dxb:BarButtonItem Content="DataHeader"
                                                       Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataHeaderCommand, RelativeSource={RelativeSource Self}}"
                                               CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}">
                                    </dxb:BarButtonItem>
                                    <dxb:BarButtonItem Content="DataBegin"
                                                            Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataBeginCommand, RelativeSource={RelativeSource Self}}"
                                               CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}">
                                    </dxb:BarButtonItem>
                                </dxg:TableView.RowCellMenuCustomizations>
                                <dxmvvm:Interaction.Behaviors>
                                    <dxmvvm:EventToCommand EventName="MouseDoubleClick"
                                                   Command="{Binding ShowRowDetailsCommand}"
                                                   PassEventArgsToCommand="True">
                                        <dxmvvm:EventToCommand.EventArgsConverter>
                                            <dx:EventArgsToDataRowConverter/>
                                        </dxmvvm:EventToCommand.EventArgsConverter>
                                    </dxmvvm:EventToCommand>
                                </dxmvvm:Interaction.Behaviors>
                            </dxg:TableView>
                        </dxg:GridControl.View>
                    </dxg:GridControl>
                </dx:DXTabItem>
                <dx:DXTabItem Header="Testtab">
                    <dxg:GridControl ItemsSource="{Binding GridData}" AutoGenerateColumns="AddNew">
                            <dxg:GridControl.View>
                            <dxg:TableView>
                                <dxmvvm:Interaction.Behaviors>
                                    <dxmvvm:EventToCommand EventName="MouseDoubleClick"
                                                   Command="{Binding ShowRowDetailsCommand}"
                                                   PassEventArgsToCommand="True">
                                        <dxmvvm:EventToCommand.EventArgsConverter>
                                            <dx:EventArgsToDataRowConverter/>
                                        </dxmvvm:EventToCommand.EventArgsConverter>
                                    </dxmvvm:EventToCommand>
                                </dxmvvm:Interaction.Behaviors>
                            </dxg:TableView>
                        </dxg:GridControl.View>
                    </dxg:GridControl>
                </dx:DXTabItem>
            </dx:DXTabControl>
        </Grid>
    </UserControl>

    完整实例下载

  • 相关阅读:
    route add提示: "SIOCADDRT: No such process
    linux下route命令--说的比较清楚!
    linux route命令的使用详解
    Linux命令学习手册-route命令
    workqueue --最清晰的讲解
    udhcpc命令
    Mutex, semaphore, spinlock的深度解析
    dev_alloc_skb(len+16) skb_reserve(skb,2) skb_put(skb,len)
    skb_reserve(skb,2)中的2的意义
    option和 usb-serial驱动基本区别
  • 原文地址:https://www.cnblogs.com/runningRain/p/13926951.html
Copyright © 2011-2022 走看看