绑定后,从 UIElement 中查找 Bound 属性

发布于 09-18 22:03 字数 826 浏览 4 评论 0原文

案例:

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

Xaml:


  <堆栈面板>
      
  

。CS

 公共 MainPage()
    {
        初始化组件();
        LayoutRoot.DataContext = new customer() { Adress = "Some Adr" };
    }

所以问题是,在代码后面。如何获取绑定(地址)的属性(字符串)。我需要它来访问 customer.adress 作为属性,以分配另一个变量。 (在本例中,当事件发生时。例如,在 this.Loaded 发生之后。)

因此,我获得了 UIElement(发送者),并且可以从其 DataContext 中获取客户。

简而言之,如何获取绑定对象的属性名称。 (绑定对象很容易找到,我只是使用 DataContext 来获取客户,但是我在哪里可以获取来自发送者的 xaml 中的属性名称(例如名称))

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

Case:

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" };
    }

So the Question is, in code behind. how do I get the property (string) of the bound (Adress). I need it to access the customer.adress as a property, to assign another variable. (in this case when a event occours. e.g. after the this.Loaded occurs.)

So I got the UIElement (sender) and I can get the customer form its DataContext.

In short, how do I get the property name of the binding object. (the binding object is easy to find I just use DataContext to get the customer, but where can I get the name of the property? that are in the xaml (eg. name) from the sender)

(I plan to use reflection if it is nessesery to access the "adress" inside customer) but how to get the "name" of the property that text in the textBox is bound to.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与往事干杯2024-09-25 22:03:30

尝试以下操作:

为您的 TextBox 指定一个名称,以便您可以从代码中访问它:

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

在代码隐藏中:

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

现在可以从以下位置将绑定属性的名称作为字符串提取:

bExpr.ParentBinding.Path.Path

Try the following:

Give your TextBox a name, so you can access it from code:

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

In code behind:

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

The name of the bound property can now be extracted as a string from:

bExpr.ParentBinding.Path.Path
二智少女猫性小仙女2024-09-25 22:03:30

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

However, I would advise against this; try to use established MVVM principles and find out the bound values in the view-models instead of from the views. If you state your problem a bit more clearly, like for instance, if there are multiple customers in a list and you need the address of the selected one, we might be able to help further.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文