0

我被迫使用第三方控件来屏蔽文本输入。第三方控件的 XAML 如下所示
<thirdParty:MaskInput Value={Binding Path=Phone, UpdateSourceTrigger=LostFocus} x:Name=Phone LostFocus=Phone_LostFocus />

现在在我后面的代码中,我有一个事件处理程序的代码,如下所示 -
public void Phone_LostFocus(object sender, RoutedEventArgs e) { ((MaskInput)sender).Value = ((MaskInput)e.OriginalSource).Text; }

当我执行此代码时,有时会设置 Value 属性,有时未将其设置为文本。

我怀疑 Binding 的 UpdateSourceTrigger。我应该将其更改为其他内容吗?在这种情况下,UpdateSourceTrigger 和事件本身之间的顺序是什么?该顺序是否可预测,即它是否总是以该顺序发生?

4

1 回答 1

1

我假设您在调用 LostFocus 事件时需要更改?

您可以在这里做一些事情,因为据我所知,LostFocus 的 UpdateSourceTrigger 和 LostFocus 的事件之间的顺序是不可预测的。

1.在不同的时间更新源触发器。如果您在属性更改时执行此操作,则您的模型将在您的 LostFocus 事件被调用时更新。缺点是如果每次更新模型时都在后台进行大量处理,这将运行缓慢。

<thirdParty:MaskInput Value={Binding Path=Phone, UpdateSourceTrigger=PropertyChanged} LostFocus=Phone_LostFocus/>

2.在 LostFocus 事件中传播对模型的更改,并将绑定保留为 OneWay(从模型到控件)。

<thirdParty:MaskInput Value={Binding Path=Phone, Mode=OneWay}, LostFocus=Phone_LostFocus/>

public void Phone_LostFocus(object sender, RoutedEventArgs e) { 
    myPhone.Value = ((MaskInput)sender).Text;
    //rest of event code here.
}

3.在 LostFocus 事件中使用 MaskInput 值,不用担心模型什么时候得到它的变化。

<thirdParty:MaskInput Value={Binding Path=Phone, UpdateSourceTrigger=LostFocus}, LostFocus=Phone_LostFocus/>

public void Phone_LostFocus(object sender, RoutedEventArgs e) { 
    string currentText = ((MaskInput)sender).Text;
    //rest of event using currentText;
}
于 2013-10-12T20:34:14.777 回答