在View上分配事件时,无法引用Base Class方法

时间:2012-09-17 13:36:22

标签: c# silverlight xaml

前几天我意识到在Silverlight中,为了始终更新任何texbox上的绑定(为了验证每个KeyPress中的错误),我需要在每个中的TextChanged事件事件上使用此代码我在系统中使用的TextBox:

TextBox txCtl = (TextBox)sender; if (txCtl != null)
{
    var be = txCtl.GetBindingExpression(TextBox.TextProperty);

    if (be != null)
    {
        be.UpdateSource();
    }
}

此代码运行良好(来源:http://forums.silverlight.net/t/51100.aspx/1)。问题是:我不想在CodeBehind的每个视图中重复它,所以我决定创建一个自定义的ViewBase,我会在其上留下这些代码。我所做的只是:

public class ViewBase : ChildWindow
{
    protected void tboxTextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox txCtl = (TextBox)sender; if (txCtl != null)
        {
            var be = txCtl.GetBindingExpression(TextBox.TextProperty);

            if (be != null)
            {
                be.UpdateSource();
            }
        }
    }
}

然后我的视图现在是ViewBase而不是UserControl,所以我也将XAML更改为:

<src:ViewBase x:Class="Oi.SCPOBU.Silverlight.Pages.CadastroClassificacao"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:Oi.SCPOBU.Silverlight.Pages" [...]

最后,在我的文本框中,我留下了引用与往常相同的方法的事件,但现在该方法在ViewBase中,而不是在CodeBehind中:

<TextBox
   x:Name="tbxNome"
   Width="300"
   MaxLength="50"
   HorizontalAlignment="Left"
   TextChanged="tboxTextChanged"
   Text="{Binding DTOClassificacao.Nome, Mode=TwoWay, NotifyOnValidationError=True>

对我来说似乎很简单,但这不起作用。代码编译,但在运行时我得到错误:“消息=无法分配给属性'System.Windows.Controls.TextBox.TextChanged'。[Line:43 Position:37]”,在InitializeComponent()方法上。

有人知道我如何将基类中的方法分配给事件?或者我真的必须在我拥有的每一个视图中重复这段代码吗?

1 个答案:

答案 0 :(得分:1)

  

为了始终更新任何texbox上的绑定(为了   验证每个KeyPress中的错误)我在TextChanged上需要这个代码   我在系统中的每个TextBox中的事件事件

您是否尝试过UpdateSourceTrigger.PropertyChanged

<TextBox Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>