【发布时间】:2017-05-16 17:41:04
【问题描述】:
我想在用户控件中绑定一个ListView 项。在此列表中显示自定义格式的文本。
我在没有用户控制的情况下完成了这项工作。所以下面的代码运行良好:
<StackPanel Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="left">
<ListView ItemsSource="{x:Bind WeatherViewModel.WeatherForecast}" >
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:WeatherForecast">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- temperature -->
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="47"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="47"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{x:Bind MaxTemperature}"
FontSize="16"
Grid.Column="0"
FontFamily="Sergoe UI"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Style="{StaticResource BasicTextBlock}"/>
<TextBlock Text="|"
FontSize="16"
Grid.Column="1"
FontFamily="Sergoe UI"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource BasicTextBlock}"/>
<TextBlock Text="{x:Bind MinTemperature}"
FontSize="16"
Grid.Column="2"
FontFamily="Sergoe UI"
HorizontalAlignment="left"
VerticalAlignment="Center"
Style="{StaticResource BasicTextBlock}"/>
</Grid>
</TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</StackPanel>
接下来我尝试为这个 ListView 创建一个用户控件
<StackPanel Orientation="Horizontal" HorizontalAlignment="left">
<ListView ItemsSource="{Binding Path=.}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- temperature -->
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="47"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="47"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding MaxTemperature}"
FontSize="16"
Grid.Column="0"
FontFamily="Sergoe UI"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Style="{StaticResource BasicTextBlock}"/>
<TextBlock Text="|"
FontSize="16"
Grid.Column="1"
FontFamily="Sergoe UI"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource BasicTextBlock}"/>
<TextBlock Text="{Binding MinTemperature}"
FontSize="16"
Grid.Column="2"
FontFamily="Sergoe UI"
HorizontalAlignment="left"
VerticalAlignment="Center"
Style="{StaticResource BasicTextBlock}"/>
</Grid>
</TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</StackPanel>
我设置了这个视图的dataContext
this.WeatherForecastView.DataContext = this.WUWeatherViewModel.Forecast;
但是如何定义 DataTemplate 的数据类型呢? ListView的ItemSource的Binding是否正确?
【问题讨论】:
-
ItemsSource="{Binding WeatherForecast}",DataType 仅对 x:Bind 是必需的,因为它在编译时创建绑定并且需要知道您要绑定的对象类型,您不需要需要它与 Binding 因为它在运行时被解析,取决于当前的 DataContext 无论实际类型是什么