C# UWP:用户控件ListView数据模板数据类型绑定
我想在用户控件中绑定一个C# UWP:用户控件ListView数据模板数据类型绑定,c#,xaml,uwp,C#,Xaml,Uwp,我想在用户控件中绑定一个ListView项。在此列表中显示自定义格式的文本 我在没有用户控制的情况下完成了这项工作。因此,以下代码运行良好: <StackPanel Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="left"> <ListView ItemsSource="{x:Bind WeatherViewModel.WeatherForec
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>
但是如何定义DataTemplate的数据类型呢?
ListView的ItemSource的绑定是否正确
ListView的ItemSource的绑定是否正确
是的,前提是StackPanel的DataContext(可能与父UserControl相同)是IEnumerable
ItemsSource=“{Binding}”
是ItemsSource=“{Binding Path=.}”
的缩写
但是如何定义DataTemplate的数据类型呢
尽管未编译的绑定不需要,但您可以如下指定DataTemplate的数据类型:
<DataTemplate x:DataType="local:WeatherForecast">
ItemsSource=“{Binding WeatherForecast}”,数据类型仅对x:Bind是必需的,因为它在编译时创建绑定,并且需要知道要绑定到的对象的类型,您不需要绑定它,因为它在运行时被解析,根据当前的DataContext,无论实际类型是什么,问题在于ItemSource绑定。代码ItemsSource=“{Binding}”有效,而ItemsSource=“{Binding Path=.}”无效。
this.WeatherForecastView.DataContext = this.WUWeatherViewModel.Forecast;
<DataTemplate x:DataType="local:WeatherForecast">
<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView x:Name="lv" ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:WeatherForecast">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
namespace App1
{
public class WeatherForecast
{
public string Name { get; set; } = "wf";
}
}