3

私は WPF を初めて使用し、WSDL から XAML テキストボックスに派生したネストされたオブジェクトを含む要求オブジェクトをバインドするのに苦労しています。プログラムでテキスト ボックスにバインドできましたが、XAML 経由でバインドするために必要な構文を理解したいと思います。ある程度の方向性がわかれば、完全な解決策を調査す​​るのがはるかに簡単になります。ありがとう

ResultSet と Message オブジェクトは常に [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 ウォッチの戻り値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"/>

4

2 に答える 2

1

要求オブジェクトは既にDataContext に配置しており、すべてのバインディングの既定のSourceになっています。そのため、別の Source (DataContext をオーバーライドするだけ) を指定する代わりに、バインディングの Path を使用して、DataContext から必要なプロパティに移動します。

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

DataContext がどのように機能するか、および Window でコントロールからコントロールに「継承」される方法を説明する記事を次に示します

于 2013-01-02T23:19:47.237 に答える
1

リクエストを受信して​​メッセージを抽出するコンバーターを使用します。

<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;
        }
   }
于 2013-01-02T22:19:22.263 に答える