要解决这个问题,我可以想象我需要使用PRISM或数据模板选择器。我不太确定。好吧,让我解释一下我的情况。我有这个名为BinaryProblem的类,并且是模型。
public class BinaryProblem<T> {
public T Number1 { get; set; }
public T Number2 { get; set; }
}
BinaryProblem是一个泛型类,因此T可以是int,double,decimal或包含另一个Fraction
。
public class Fraction {
public int Numerator {get;set;}
public int Denominator {get;set;}
}
重点在于思考为原始数据类型创建视图,为分数创建另一个视图。这是观点:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<..Something.. Text="{Binding Number1}" Grid.Column="0" />
<TextBlock Grid.Column="1" Text="+" />
<..Something.. Text="{Binding Number2}" Grid.Column="2" />
</Grid>
<..Something..>
所说的,我不知道该怎么办。这个想法是,如果T
是原始数据类型,则应该只绘制一个文本块;但如果是Fraction数据类型应该显示下一个模板或类似的东西:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding Numerator}" />
<Rectangle Grid.Row="1" Fill="Black" Height="5" />
<TextBlock Grid.Row="2" Text="{Binding Denominator}" />
</Grid>
我不想创建两个视图,我猜是否有可能避免创建两个视图?我的意思是,只有一个视图并检测是否必须显示分数模板或文本块。
答案 0 :(得分:3)
试试这个:首先为支持的类型创建数据模板:
<DataTemplate DataType="{x:Type local:Fraction}" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding Numerator}" />
<Rectangle Grid.Row="1" Fill="Black" Height="5" />
<TextBlock Grid.Row="2" Text="{Binding Denominator}" />
</Grid>
</DataTemplate>
<DataTemplate xmlns:sys="clr-namespace:System;assembly=mscorlib"
DataType="{x:Type sys:Int32}" >
<TextBlock Background="Green" Text="{Binding}" />
</DataTemplate>
然后用ContentPresenter替换'Something'部分:
<ContentPresenter Grid.Column="0" Content="{Binding Number1}">