第一次加载一个窗口我希望折叠一个文本框,同时保持我的Viewmodel中属性(SomeProp)的绑定。
不幸的是,我无法做到这一点。
我的尝试:
尝试1: 我试图明确地在viewmodel的构造函数中将值设置为null,并且明确地调用Onpropertychanged。转换器未被触发。
尝试2: 在后面的代码中,我将默认可见性设置为visibility.Collapsed。这似乎有一个副作用,即Visibility不再绑定到SomeProp属性。
尝试3: 谷歌搜索后我发现了一些关于PriorityBinding的东西,但这似乎只适用于文本框的TEXT属性 Use a default value when binding cannot be evaluated because of a null value
提前谢谢你,
额外信息:
我有一个文本框,只有在我的ViewModel中的属性(SomeProp)具有值'Other'时才能看到它。 我成功地使用了转换器。这意味着每当我更改SomeProp的值时,文本框将变为可见/不可见,具体取决于SomeProp的值。 我使用了以下代码: WPF: Binding Visibility by string contents
有没有人知道如何在保持绑定到属性SomeProp的同时将te文本框可见性设置为折叠。
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;
}
}
答案 0 :(得分:4)
当源值为TargetNullValue={x:Static Visibility.Collapsed}
时,设置null
应该折叠绑定目标。
您还可以设置FallbackValue
,这在绑定或转换失败时应用。如果NullReferenceException
为X.Y
,此类失败可能包括绑定到X
时发生的null
。