PropertyChanged和LostFocus的TextBox UpdateSourceTrigger

时间:2014-08-28 01:48:45

标签: c# wpf xaml

您好我对wpf / xaml文本框c#实现有疑问。

我试图弄清楚如何在我的c#代码中知道正在使用的UpdateSourceTrigger。 我是新手,所以如果人们对我有耐心并乐于助人,我将非常感激。

在我的C#中,我需要知道如何使用UpdateSourceTrigger访问文本框中的数据。我知道在调用OnPropertyChanged()时属性已更改。但我还需要知道用户是否尝试在C#代码中使用LostFocus或PropertyChanged。这样我就可以为这两种情况做一些特殊的处理。

xaml

<TextBox>
    <TextBox.Text>
        <Binding Source="{StaticResource myDataSource}" Path="Name"
        UpdateSourceTrigger="PropertyChanged"/>
    </TextBox.Text>
</TextBox>    

C#

protected void OnPropertyChanged(string name)
{
    // If UpdateSourceTrigger= PropetyChanged then process one way
    // If UpdateSourceTrigger= LostFocus then process one way
}

使用LostFocus时是否还有其他方法被调用?

谢谢你

2 个答案:

答案 0 :(得分:2)

您必须获得对TextBlock的引用并获取绑定表达式,然后您才能访问Binding信息

示例:(无错误/空检查)

<TextBox x:Name="myTextblock">
     <TextBox.Text>
        <Binding Source="{StaticResource myDataSource}" Path="Name"
        UpdateSourceTrigger="PropertyChanged"/>
     </TextBox.Text>
</TextBox>


var textblock = this.FindName("myTextBlock") as TextBlock;
var trigger = textblock.GetBindingExpression(TextBlock.TextProperty).ParentBinding.UpdateSourceTrigger;
// returns "PropertyChanged"

答案 1 :(得分:1)

获取绑定对象的另一种方法是:

Binding binding = BindingOperations.GetBinding(myTextBox, TextBox.TextProperty);

if (binding.UpdateSourceTrigger.ToString().Equals("LostFocus"))
{

}
else
{

}