繁体   English   中英

如果绑定为null,则在XAML中设置默认值

[英]Set default value in XAML if binding is null

编辑

这不是字符串null值的后备的重复。 我要求对复杂类型进行后备。

原始问题

这是我昨天问的一个问题的后续问题:

将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>

将为自定义类型创建一个DataTemplate ,然后将ContentControl绑定到该类型的属性。

现在的问题是,该属性(示例中的FirstPath )可能为null并且没有呈现UI元素。 即使属性为null如何完成从DataTemplate呈现控件的操作

正如Evk所建议的,我已经实现了一个Converter:

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"/>

并将其添加到该属性的绑定中:

但是仅在值不为null时才调用转换器

我在另一个问题中找到了这个问题的答案(代码来自Clemens):

<Window.Resources>
    <model:PathSelector x:Key="FallbackPathSelector" />
</Window.Resources>
...

<ContentControl Content="{Binding MyPathSelector,
                          FallbackValue={StaticResource FallbackPathSelector}}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM