2010-09-11 54 views
1

案后:寻找绑定属性,从的UIElement,它已经绑定

public class customer 
{ 
    public string Adress { get; set; } 
} 

的XAML:

<Grid x:Name="LayoutRoot" Background="White" > 
    <StackPanel> 
     <TextBox Text="{Binding Adress}"/> 
    </StackPanel> 
</Grid> 

的.cs

public MainPage() 
    { 
     InitializeComponent(); 
     LayoutRoot.DataContext = new customer() { Adress = "Some Adr" }; 
    } 

所以问题是,在代码背后。我如何获得绑定(地址)的属性(字符串)。我需要它作为属性访问customer.adress,以分配另一个变量。 (在这种情况下,当事件发生时,例如在此之后,发生负载)。

因此,我得到UIElement(发件人),并且我可以从客户表单中获取其DataContext

总之,如何获取绑定对象的属性名称。 (该绑定对象很容易找到我只使用DataContext来获取客户,但我可以在哪里获得属性的名称?在发件人的xaml(例如名称)

(我计划如果需要访问客户中的“地址”,则使用反射),但如何获取文本框中文本绑定的属性的“名称”。

回答

2

尝试以下操作:

给您TextBox一个名字,这样你就可以在代码中访问它:

<Grid> 
    <TextBox Name="textBox" Text="{Binding Adress}" /> 
</Grid> 

在后面的代码:

BindingExpression bExpr = textBox.GetBindingExpression(TextBox.TextProperty); 

绑定属性的名称现在可以从字符串中提取:

bExpr.ParentBinding.Path.Path 
+0

谢谢你的回答,我现在可以使用反射来获得属性。 – ReLoad 2010-09-13 20:43:51

+0

有没有一种方法可以让我们在没有给它的KeyUp事件上的控件命名的情况下得到相同的结果? – Chatur 2016-05-11 19:43:32

0

但是,我建议不要这样做;尝试使用已建立的MVVM原则,并在视图模型中而不是视图中查找绑定值。如果您更清楚地陈述您的问题,例如,如果列表中有多个客户,并且您需要选定地址,我们可能会进一步提供帮助。

+0

两者都有多重和单一。但是,第一个答案是可以的。我用它作为解决方案的基础。它的工作完美。 Maby我可以发布解决方案吗? – ReLoad 2010-09-13 20:46:43