PropertyPath的属性

时间:2011-02-17 10:22:07

标签: attributes properties binding

如果我有一个PropertyPath,是否有可能获得它的属性?如果没有,我需要什么最小的信息?从示例中我需要获得SomeAttribute。我需要它自定义绑定类。

例如

Test.xaml

<TextBox Text={Binding SomeValue}/>

Test.xaml.cs

[SomeAttribute]
public string SomeValue { get; set; }

2 个答案:

答案 0 :(得分:0)

通过PropertyPath,您只能使用属性或子属性。 请阅读data binding overview以获取更多信息。

答案 1 :(得分:0)

您可以使用反射技术获取绑定属性的属性。

以下是示例代码。

<强> SomeEntity.cs

public class SomeEntity
{
    [SomeAttribute]
    public string SomeValue { get; set; }
}

<强> MainWindow.xaml

<Window x:Class="WpfApplication4.MainWindow" ...>
    <StackPanel>
        <TextBox Name="textBox" Text="{Binding SomeValue}"/>
        <Button Click="Button_Click">Button</Button>
    </StackPanel>
</Window>

<强> MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new SomeEntity();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Get bound object from TextBox.DataContext.
        object obj = this.textBox.DataContext;

        // Get property name from Binding.Path.Path.
        Binding binding = BindingOperations.GetBinding(this.textBox, TextBox.TextProperty);
        string propertyName = binding.Path.Path;

        // Get an attribute of bound property.
        PropertyInfo property = obj.GetType().GetProperty(propertyName);
        object[] attributes = property.GetCustomAttributes(typeof(SomeAttribute), false);
        SomeAttribute attr = (SomeAttribute)attributes[0];
    }
}