如果ViewModel中的默认值为null,则将默认值绑定到可见性

3
第一次加载窗口时,我希望一个文本框被折叠起来,同时保持与我的视图模型中的属性(SomeProp)的绑定。
不幸的是,我无法做到这一点。
我尝试过的方法:
尝试1: 我尝试在视图模型的构造函数中显式将值设置为null,并显式调用Onpropertychanged。但转换器没有被触发。
尝试2: 在代码后台中,我将默认可见性设置为Collapsed。这似乎有一个副作用,即Visibility不再绑定到SomeProp属性。
尝试3: 在Google上搜索后,我发现了关于PriorityBinding的一些内容,但这似乎只适用于文本框的TEXT属性。 当绑定不能被评估因为空值时使用默认值 提前感谢您的帮助,
额外信息:
我有一个文本框,它只在我的ViewModel中的属性(SomeProp)具有值“Other”时才可见。 我成功地使用了一个转换器来实现这一点。这意味着每当我更改SomeProp的值时,文本框会根据SomeProp的值变得可见/不可见。 我使用了以下代码: WPF:按字符串内容绑定可见性 有人知道如何将文本框的可见性设置为Collapsed,同时保持对属性SomeProp的绑定吗?
XAML
        <TextBox Name="txtbox" Visibility="{Binding SomeProp.Description, Converter={StaticResource StringOtherToVisibilityConverter}}" TextWrapping="Wrap" Height="150" MaxLength="2000"
                 Text="{Binding SomeProp2.Text, Mode=TwoWay}"
             ScrollViewer.VerticalScrollBarVisibility="Auto" AcceptsReturn="True">
        </TextBox>

转换器

class StringOtherToVisibilityConverter : System.Windows.Markup.MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{

    if (value != null)
    {
        if (value.ToString() == "Other")
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
        }


    }
    else
    {
        return Visibility.Collapsed;
    }

}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    return null; //DependencyProperty.UnsetValue;
}

public override object ProvideValue(IServiceProvider serviceProvider)
{
    return this;
}


}

3
设置 TargetNullValue={x:Static Visibility.Collapsed} 可以在源值为 null 时折叠绑定目标。您还可以设置 FallbackValue,当绑定或转换失败时应用该值。 - Mike Strobel
1
TargetNullValue 不起作用。可能是因为我在使用 SomeProp.Description 时,SomeProp 为空?另一方面,FallBackValue 起作用了。谢谢。如果您回答,我会接受。 - user1841243
1个回答

8

当源值为null时,设置TargetNullValue={x:Static Visibility.Collapsed}应该折叠绑定目标。

您还可以设置FallbackValue,当绑定或转换失败时应用。此类故障可能包括绑定到X.Y时发生的NullReferenceException,如果Xnull


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接