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)
TargetNullValue={x:Static Visibility.Collapsed}当源值为时,设置应折叠绑定目标null。
您还可以设置FallbackValue,当绑定或转换失败时将应用。此类故障可能包括NullReferenceException绑定到X.Yif Xis 时将发生的故障null。