修改
这与字符串空值的回退无关。我要求复杂类型的后备。
原始问题
这是我昨天问过的问题的后续问题:
Bind WPF Command to ViewModel property in C# XAML
我接受的答案的核心部分是:
<Window.Resources>
<DataTemplate DataType="{x:Type local:SettingsPathSelectorViewModel}">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding SettingsPath}" />
<Button
Content="..."
Command="{Binding OpenFile}"
HorizontalAlignment="Left"
MinWidth="40"
Margin="4,0,0,0"
/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<StackPanel Orientation="Vertical">
<Label>First Path</Label>
<ContentControl Content="{Binding FirstPath}" />
</StackPanel>
</Grid>
为自定义类型创建DataTemplate
,然后将ContentControl
绑定到该类型的属性。
现在的问题是,属性(示例中的FirstPath
)可能是null
,并且没有呈现UI元素。即使属性为DataTemplate
null
呈现控件也是如此
正如Evk建议我实现了转换器:
public class PathSelectorConverter : IValueConverter
{
public object Convert(object o, Type type, object parameter, CultureInfo culture)
{
return o ?? new PathSelector();
}
public object ConvertBack(object o, Type type, object parameter, CultureInfo culture)
{
return o ?? new PathSelector();
}
}
我在我的窗口中添加了转换器的一个实例:
<view:PathSelectorConverter x:Key="pathSelectorConverter"/>
并将其添加到属性的绑定中:
但只有当值不为空时才调用转换器
答案 0 :(得分:3)
我在另一个question找到了这个问题的答案(代码来自Clemens):
<Window.Resources>
<model:PathSelector x:Key="FallbackPathSelector" />
</Window.Resources>
...
<ContentControl Content="{Binding MyPathSelector,
FallbackValue={StaticResource FallbackPathSelector}}"/>