WPF绑定嵌套对象

时间:2013-01-02 22:09:14

标签: wpf object binding nested

我是WPF的新手,我很难将 请求 对象与嵌套对象绑定,这些对象是从WSDL派生到XAML文本框的。以编程方式我能够绑定到文本框但我想了解通过XAML绑定所需的语法。一旦我有了一些方向,它将使研究完整解决方案变得更加容易。感谢

ResultSet和Message Object将始终为[0]。

代码

MainWindow()
{
    InitializeComponent();
    GetMarketingMessagesResponse request = new GetMarketingMessagesResponse();
    request = (GetMarketingMessagesResponse)XMLSerializerHelper.Load(request, @"C:\SSAResponse.xml");
    DataContext = request;
    Binding bind = new Binding();
    bind.Source = request.ResultSet[0].Message[0];
    bind.Path = new PropertyPath("SubjectName");
    this.txtbSubject.SetBinding(TextBox.TextProperty, bind);
 }

Visual Studio Watch中的返回值 bind.Source = request.ResultSet [0] .Message [0]; 是 bind.Source = {GetMarketingMessagesResponseResultSetMessage}这是类名。

XAML

我正在寻找关于如何绑定到此类和

内部属性的方向
<TextBox Name="txtbMessageDetails" HorizontalAlignment="Right" Margin="0,50.08,8,0"    TextWrapping="Wrap" Text="{Binding Source=ResultSet[0].Message[0], Path=SubjectName}" VerticalAlignment="Top" Height="87.96" Width="287.942"/>

2 个答案:

答案 0 :(得分:1)

使用 converter 来接收请求并提取消息。

<Window.Resources>
    <local:MessageExtractorConverter x:Key="messageExtractorConverter" />
</Window.Resources>


<TextBox Name="txtbMessageDetails" HorizontalAlignment="Right" Margin="0,50.08,8,0"    TextWrapping="Wrap" Text="{Binding Converter={StaticResource messageExtractorConverter}" VerticalAlignment="Top" Height="87.96" Width="287.942"/>

转换器实施:

public class MessageExtractorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var val = value as GetMarketingMessagesResponse;
        if (val != null)
        {
            // You can modify this code to extract whatever you want...
            return val.ResultSet[0].Message[0];
        }
        else
        {
            return null;
        }
   }

答案 1 :(得分:1)

您已将请求对象放入DataContext中,使其成为所有绑定的默认。因此,不是指定另一个Source(它只是覆盖DataContext),而是使用绑定的Path来从DataContext到你需要的属性:

<TextBox Name="txtbMessageDetails" Text="{Binding Path=ResultSet[0].Message[0].SubjectName}" />

这篇文章解释了DataContext如何工作,以及它如何从窗口中的控件“继承”到控件:http://www.codeproject.com/Articles/321899/DataContext-in-WPF