0

XAMLデータバインディングとDataTemplateの使用について理解し始めており、非常に便利です。

次のステップに進み、以下のコードにロジックを組み込むための最良の方法は何ですか。たとえば、「Address2」に何かがあるかどうかを確認し、ある場合はそれを表示するか、外部アドレスを別の方法でフォーマットするなどです。

<Window.Resources>
    <DataTemplate x:Key="CustomersTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="35"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Rectangle Height="30" Width="30" Margin="0 4 0 0" Fill="LightGreen" Grid.Column="0" VerticalAlignment="Top"/>
            <StackPanel Margin="3 0 0 10" Orientation="Vertical" Grid.Column="1">
                <TextBlock Text="{Binding Path=ContactName}"/>
                <TextBlock Text="{Binding Path=CompanyName}"/>
                <TextBlock Text="{Binding Path=Address}"/>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0}, {1} {2}">
                            <Binding Path="City"/>
                            <Binding Path="Region"/>
                            <Binding Path="PostalCode"/>
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </StackPanel>
        </Grid>
    </DataTemplate>
</Window.Resources>

<Grid>
    <ListBox Name="dataListBox" ItemTemplate="{StaticResource CustomersTemplate}"/>
</Grid>

完全を期すためのコードは次のとおりです(Northwindで自動生成されたLINQ to SQLクラス)。

CustomerDataContext dc = new CustomerDataContext();
var query = from companyName in dc.Customers
            select companyName;
dataListBox.ItemsSource = query.ToList();
4

2 に答える 2

1

WPF コンバーターを探しています。できることの概要については、これらのコンバーターのサンプルを確認してください。基本的に、バインディングによってプロパティの値が設定される前に、オブジェクトに対して任意のカスタム ロジックを実行できます。参照:バインディング コンバータ プロパティ

また、便利なコンバーターの Codeplexの作業の一部を確認することもできます。

于 2009-02-04T15:01:49.213 に答える
0

トリガーの素晴らしい世界へようこそ。例から空白の住所行を削除するコードを次に示します。

住所のテキスト ブロックに名前を追加し、住所が空白のときにそれを非表示にする DataTrigger を追加しました

<Window.Resources>
    <DataTemplate x:Key="CustomersTemplate">
        <Grid>
 ... snip ...
                <TextBlock Name="AddressLine" Text="{Binding Path=Address}"/>
 ... snip ...
        </Grid>
        <DataTemplate.Triggers>
           <DataTrigger Binding="{Binding Path=Address}" Value="">
              <Setter TargetName="AddressLine" Property="Visibility" Value="Collapsed"/>
           </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
</Window.Resources>
于 2009-02-04T15:24:37.997 に答える