【问题标题】:WPF/XAML - Binding to TextBox PreviewTextInput EventWPF/XAML - 绑定到 TextBox PreviewTextInput 事件
【发布时间】:2018-11-09 10:00:50
【问题描述】:

我正在尝试将文本框“PreviewTextInput”绑定到视图模型中的方法。 我正在关注this article 但是我的方法永远不会被调用。 这是我在 XAML 中的代码:

<UserControl x:Class="ConfigurationView"
             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:local="clr-namespace:OPCUAProjectModule.Views"
             xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             mc:Ignorable="d" 
             d:DesignHeight="500" d:DesignWidth="700">
.....
.....
.....
                    <TextBox x:Name="txtServer" Text="{Binding Server, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="PreviewTextInput" >
                                <i:InvokeCommandAction Command="{Binding IsAllowedInput}" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </TextBox>
....
....

这里我们使用 ViewModel 代码:

public class ConfigurationViewModel : BindableBase, INotifyDataErrorInfo
{
....
....
    public string Server
    {
        get
        {
            return this.server;
        }

        set
        {
            this.SetProperty(ref this.server, value);
        }
    }

    private void IsAllowedInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
    {
        //Never enters here.
    }

【问题讨论】:

  • IsAllowedInput 是一种方法。绑定不适用于方法。你需要一个公共的 ICommand 属性来进行命令绑定

标签: c# wpf xaml mvvm prism


【解决方案1】:

如果您添加对Microsoft.Expressions.Interactions.dll 的引用(Project->Add Reference->Assemblies->Extensions in Visual Studio),您可以使用CallMethodAction 调用方法:

<TextBox x:Name="txtServer" Text="{Binding Server, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
         xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="PreviewTextInput" >
            <ei:CallMethodAction TargetObject="{Binding}" MethodName="IsAllowedInput"  />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>

当然方法不能是private

public void IsAllowedInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
    //...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多