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

use*_*243 2 wpf xaml mvvm ivalueconverter

第一次加载窗口时,我希望折叠文本框,同时保持对Viewmodel中属性(SomeProp)的绑定。

不幸的是,我无法做到这一点。

我尝试过的

尝试1:我尝试在viewmodel的构造函数中将值显式设置为null,并显式调用Onpropertychanged。转换器未触发。

尝试2:在后面的代码中,我将默认可见性设置为visible.Collapsed。这似乎有一个副作用,即“可见性”不再绑定到SomeProp属性。

尝试3:在谷歌搜索后,我发现了一些关于PriorityBinding的信息,但这似乎仅适用于文本框的TEXT属性。 当由于空值而无法评估绑定时,请使用默认值

先感谢您,

额外信息:

我有一个文本框,并且仅当ViewModel中的属性(SomeProp)的值为“其他”时,该文本框才可见。我已经为此成功使用了转换器。这意味着每当我更改SomeProp的值时,文本框就将根据SomeProp的值变为可见/不可见。我使用了以下代码: WPF:按字符串内容的绑定可见性

有谁知道我如何在保持绑定到属性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>
Run Code Online (Sandbox Code Playgroud)

转换器

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;
}


}
Run Code Online (Sandbox Code Playgroud)

Mik*_*bel 5

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

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