鉴于此DataTemplate
:
<DataTemplate x:DataType="Color">
...
</DataTemplate>
我收到以下错误:
as运算符必须与引用类型或可空类型一起使用(&#39; Color&#39;是非可空值类型)
当您按照错误操作时,会自动为使用as
运算符的视图生成代码。
public void DataContextChangedHandler(global::Windows.UI.Xaml.FrameworkElement sender, global::Windows.UI.Xaml.DataContextChangedEventArgs args)
{
global::Windows.UI.Color data = args.NewValue as global::Windows.UI.Color;
if (args.NewValue != null && data == null)
{
throw new global::System.ArgumentException("Incorrect type passed into template. Based on the x:DataType global::Windows.UI.Color was expected.");
}
this.SetDataRoot(data);
this.Update();
}
我知道{x:Bind}
是新的,但为了以防万一,是否有人知道如何配置它以允许值类型,或者至少使用直接投射?
答案 0 :(得分:5)
在x:DateType中绑定Windows运行时类型(例如“Windows.UI.Color”)时遇到同样的问题。
我使用的当前解决方法是包装.NET引用类型。
n
答案 1 :(得分:2)
@ JeffreyChen的解决方案绝对正确,可以应用于任何其他值类型。但是在这个特定的实例中,引用SolidColorBrush
的引用显示了Color
的属性,这是系统已经为您构建的。
我建议将您的VM中的Color
属性更改为SolidColorBrush
,因为您在xaml中只需要Color
的时间就是当您需要平滑时ColorAnimation
1}}两个州之间。如果是这种情况 -
<ListView ItemsSource="{x:Bind Vm.Brushes}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="SolidColorBrush">
<TextBlock Text="Test">
<TextBlock.Foreground>
<SolidColorBrush Color="{x:Bind Color}" />
</TextBlock.Foreground>
</TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
否则,您只需绑定到XAML控件的Foreground
/ Background
/ BorderBrush
,这已经是Brush
的类型。
<ListView ItemsSource="{x:Bind Vm.Brushes}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="SolidColorBrush">
<TextBlock Text="Test" Foreground="{x:Bind}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>