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 回答