我有一个TextBoxes列表,它们绑定到不同的属性。
<TextBox Text="{Binding Name, Mode=TwoWay,ValidatesOnDataErrors=True, ValidatesOnExceptions=True, NotifyOnValidationError=True}" VerticalAlignment="Center" Margin="5" Width="300" Grid.Column="1" Grid.Row="1" LostFocus="TextBox_Validate"/>
我想写一个处理程序,如
private void TextBox_Validate(object sender, RoutedEventArgs e)
{
var textBox = (sender as TextBox);
if(textBox!=null)
{
var propertyName = X; // Get propertyName textBox.Text is bound to.
CurrentDataContext.ValidateFields("Name"); // Name in this specific textBox
}
}
是否可以获取属性的名称,以便我不必编写许多不同的方法来执行相同的操作?
答案 0 :(得分:6)
我认为这就是你想要的:
var expression = textBox.GetBindingExpression(TextBox.TextProperty);
if (expression != null && expression.ParentBinding != null)
{
var propertyName = expression.ParentBinding.Path.Path;
}
修改强>
或者您可以使用BindingOperations.GetBinding
,如here所示。我不确定一种方式是否比另一方更好。
答案 1 :(得分:1)
将文本框命名为xaml x:Name="MyTextBox"
,然后您可以检查textBox.Name == "MyTextBox"
。