WPF XAML DesignTime 数据 - 在相关模型上设置 属性 值
WPF XAML DesignTime Data - set property value on related model
假设我们有一个 Person 模型:
public class Person
{
public long Id { get; set; }
public string Name { get; set; }
public City City { get; set; }
}
我们有一个城市模型:
public class City
{
public long Id { get; set; }
public long ZipCode { get; set; }
public string Name { get; set; }
}
然后我们有一个像这样的 WPF/XAML 视图:
<Window
x:Class="WpfIssues.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfIssues"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<ItemsControl Margin="20">
<d:ItemsControl.ItemsSource>
<x:Array Type="{x:Type local:Person}">
<local:Person Name="Thomas" Id="1" />
</x:Array>
</d:ItemsControl.ItemsSource>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Id}" />
<TextBlock Grid.Column="1" Text="{Binding Name}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
所有这些都为我提供了带有单个 Person 项目的 ItemsControl 的设计时视图。
但我不知道如何在 城市 [= Person class 的 37=] - 比如 ZipCode 和 City?
有人吗?
您可以使用标记语法:
<local:Person Name="Thomas" Id="1">
<local:Person.City>
<local:City Id="10" ZipCode ="zip"/>
</local:Person.City>
</local:Person>
或带有资源的属性语法(通常,仅设计时值不太实用)
<ItemsControl Margin="20">
<ItemsControl.Resources>
<local:City Id="10" ZipCode ="zip" x:Key="City10"/>
</ItemsControl.Resources>
<d:ItemsControl.ItemsSource>
<x:Array Type="{x:Type local:Person}">
<local:Person Name="Thomas" Id="1" City="{StaticResource City10}"/>
</x:Array>
</d:ItemsControl.ItemsSource>
这是典型的 - 在 SO 上发布后 10 秒 - 我找到了解决方案:
<Window
x:Class="WpfIssues.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfIssues"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<ItemsControl Margin="20">
<d:ItemsControl.ItemsSource>
<x:Array Type="{x:Type local:Person}">
<local:Person Name="Thomas" Id="1">
<local:Person.City>
<local:City Name="Holte" />
</local:Person.City>
</local:Person>
</x:Array>
</d:ItemsControl.ItemsSource>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Id}" />
<TextBlock Grid.Column="1" Text="{Binding Name}" />
<TextBlock Grid.Column="2" Text="{Binding City.Name}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
假设我们有一个 Person 模型:
public class Person
{
public long Id { get; set; }
public string Name { get; set; }
public City City { get; set; }
}
我们有一个城市模型:
public class City
{
public long Id { get; set; }
public long ZipCode { get; set; }
public string Name { get; set; }
}
然后我们有一个像这样的 WPF/XAML 视图:
<Window
x:Class="WpfIssues.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfIssues"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<ItemsControl Margin="20">
<d:ItemsControl.ItemsSource>
<x:Array Type="{x:Type local:Person}">
<local:Person Name="Thomas" Id="1" />
</x:Array>
</d:ItemsControl.ItemsSource>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Id}" />
<TextBlock Grid.Column="1" Text="{Binding Name}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
所有这些都为我提供了带有单个 Person 项目的 ItemsControl 的设计时视图。
但我不知道如何在 城市 [= Person class 的 37=] - 比如 ZipCode 和 City?
有人吗?
您可以使用标记语法:
<local:Person Name="Thomas" Id="1">
<local:Person.City>
<local:City Id="10" ZipCode ="zip"/>
</local:Person.City>
</local:Person>
或带有资源的属性语法(通常,仅设计时值不太实用)
<ItemsControl Margin="20">
<ItemsControl.Resources>
<local:City Id="10" ZipCode ="zip" x:Key="City10"/>
</ItemsControl.Resources>
<d:ItemsControl.ItemsSource>
<x:Array Type="{x:Type local:Person}">
<local:Person Name="Thomas" Id="1" City="{StaticResource City10}"/>
</x:Array>
</d:ItemsControl.ItemsSource>
这是典型的 - 在 SO 上发布后 10 秒 - 我找到了解决方案:
<Window
x:Class="WpfIssues.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfIssues"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<ItemsControl Margin="20">
<d:ItemsControl.ItemsSource>
<x:Array Type="{x:Type local:Person}">
<local:Person Name="Thomas" Id="1">
<local:Person.City>
<local:City Name="Holte" />
</local:Person.City>
</local:Person>
</x:Array>
</d:ItemsControl.ItemsSource>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Id}" />
<TextBlock Grid.Column="1" Text="{Binding Name}" />
<TextBlock Grid.Column="2" Text="{Binding City.Name}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>