0514 资源字典

CallMethodAction 和 InvokeCommandAction

有些事件是没有直接提供命令调用的,如自定义的事件。这时候我们可以通过CallMethodAction来调用ViewModel中的方法来完成相应的操作。

一些不支持Command的控件,可以用一个CallMethodAction触发器来执行ViewModel中的方法。注意的是方法当中往往包含一些参数,这些参数一般可以通过给ViewModel设置相应的属性来绑定到相关的输入控件,如TextBox。

您可以使用 CallMethodAction 操作来调用为指定对象定义的方法。所调用的方法必须是不采用参数并且不返回值的公共方法,或是其签名与事件处理程序的签名相匹配的公共方法。”

<Button Content="TestCallMethodAction">

         <i:Interaction.Triggers>

                <i:EventTrigger EventName="Click">

                     <ec:CallMethodAction TargetObject="{Binding}" MethodName="CallThisMethod"/>

                 </i:EventTrigger>

          </i:Interaction.Triggers>

</Button>

public void CallThisMethod(){}

CallMethodAction内部用反射实现的,效率比起InvokeCommandAction要低不少。
另外Action是可以自定义的,要是感觉InvokeCommandAction不够用可以自己定义一个。

Notification通知式

Prism通过InteractionRequest 来实现弹窗交互,它是一个泛型接口,不同的类型对应不同类型的弹窗方式。
在使用InteractionRequest的时候需要在,xaml中需要注册一个Trigger:

<i:Interaction.Triggers>
        <prism:InteractionRequestTrigger SourceObject="{Binding NotificationRequest}">
            <prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" />
        </prism:InteractionRequestTrigger>
    </i:Interaction.Triggers>

 

这里用到了Interaction,他是i命名空间里的东西,那么i是什么呢?
interactivity这个是微软内置的类库,他提供了一组用户交互的类,比如我们这里用到的EventTrigger可以用来执行事件触发的操作。
在使用的时候,先引入xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
或者xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity",然后在xaml中使用他:

<i:Interaction.Triggers>
    <i:EventTrigger>

    </i:EventTrigger>
</i:Interaction.Triggers>

 

而 prism:PopupWindowAction 的 IsModal=True意味着弹框不被关闭的时候,父窗体无法使用。我刚搜索了一下,这个词的翻译竟然“模态”。

模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。 如单击【确定】或【取消】按钮等将该对话框关闭。

好,接着,我们在code-behind中声明,使用INotification类型:

 public InteractionRequest<INotification> NotificationRequest { get; set; }

使用资源字典

要是用资源字典,首先要将资源字典集成到应用程序的某些资源集合中。一般的做法都是在app.xaml文件中进行集成。代码如下:

<ResourceDictionary>

            <ResourceDictionary.MergedDictionaries>

                <ResourceDictionary Source="Test.xaml"/>

            </ResourceDictionary.MergedDictionaries>

        </ResourceDictionary>

DelegateCommand

 

<!-- 无参方式 -->
<Button Content="Test Command" Command="{Binding TestCommand}" />

<!-- 将自己作为参数 -->
<Button Content="Test Command2" Command="{Binding TestCommand2}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" >

<!-- 将父元素作为参数 -->
<Button Content="Test Command3" Command="{Binding TestCommand3}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}}" >
this.DataContext = new ViewModel();
// ViewModel 构造函数
public ViewModel()
{    CallCOmmand1 = new DelegateCOmmmand(Call1);
    CallCOmmand2 = new DelegateCOmmmand<Object>(Call2);
    CallCOmmand3 = new DelegateCOmmmand<Object>(Call3);
}

// 命令声明
public DelegateCommand CallCommand { get; private set; }
public DelegateCommand<Object> CallCommand2 { get; private set; }
public DelegateCommand<Object> CallCommand3 { get; private set; }

// 命令实现
public void Call1()
{
}

public void Call2( Object obj )
{
    Button button = obj as Button;
}

public void Call3( Object obj )
{
    ParentType parent = obj as ParentType;
}

 private DelegateCommand Command;

        public DelegateCommand Command

        {

            get

            {

                if (null == Command)

                {

                    Command = new DelegateCommand(Search, CanExecute);

                }

               return Command;

            }

        }

        private bool CanExecute()

        {

            return CanSearch;

        }

 

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="84*"/>
            <RowDefinition Height="116*"/>
            <RowDefinition Height="116*"/>
            <RowDefinition Height="70*"/>
            <RowDefinition Height="70*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="4*"/>
        </Grid.ColumnDefinitions>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="3*"/>
            </Grid.ColumnDefinitions>
            <Label  Height="Auto" Width="108"/>
            <ComboBox Grid.Column="1" Height="30" VerticalContentAlignment="Center">
            </ComboBox>
        </Grid>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="3*"/>
            </Grid.ColumnDefinitions>
            <Label  HorizontalAlignment="Stretch" VerticalContentAlignment="Top" HorizontalContentAlignment="Center" Height="Auto"/>
            <TextBox Grid.Column="1" />
        </Grid>
        <TextBlock Background="WhiteSmoke" Grid.Row="2" FontSize="15" Margin="30,10,0,10" TextWrapping="Wrap"  Text="{DynamicResource lblWarn}" Foreground="Red"/>

        <Grid Grid.Row="3" Margin="20,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Button />
            <Button Grid.Column="1" Command="{Binding WriteCmd}" IsEnabled="{Binding CurrentModel.BtnEnable}"/>
            <Button Grid.Column="2" Command="{Binding ReadCmd}" IsEnabled="{Binding CurrentModel.BtnEnable}"/>
        </Grid>
        <Grid Grid.Row="4" Margin="30,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Button />
            <Button Grid.Column="1"/>
        </Grid>
        <ScrollViewer Grid.Column="1" Grid.RowSpan="5">
           
            <RichTextBox Grid.Column="1" Grid.RowSpan="5" Padding="5" IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Auto" Background="#FFB7DEE8">
               
            </RichTextBox>
        </ScrollViewer>
    </Grid>

prism:RegionManager.RegionName="{x:Static inf:RegionNames.xxxxRegion}"

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值