Rom*_*mbé 0 c# data-binding wpf xaml datatemplate
编辑
这不是字符串空值的回退的重复。我要求对复杂类型进行回退。
原始问题
这是我昨天问的一个问题的后续问题:
将 WPF 命令绑定到 C# XAML 中的 ViewModel 属性
我接受的答案的核心部分是这样的:
<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>
Run Code Online (Sandbox Code Playgroud)
ADataTemplate是为自定义类型创建的,然后将 aContentControl绑定到该类型的属性。
现在的问题是,属性(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();
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的窗口中添加了一个转换器的实例一个资源:
<view:PathSelectorConverter x:Key="pathSelectorConverter"/>
Run Code Online (Sandbox Code Playgroud)
并将其添加到属性的绑定中:
但是转换器仅在值不为空时才被调用
我在我的另一个问题中找到了这个问题的答案(代码来自 Clemens):
<Window.Resources>
<model:PathSelector x:Key="FallbackPathSelector" />
</Window.Resources>
...
<ContentControl Content="{Binding MyPathSelector,
FallbackValue={StaticResource FallbackPathSelector}}"/>
Run Code Online (Sandbox Code Playgroud)