C# 如何实现从字符串到可见性的转换
因此,我有一个C# 如何实现从字符串到可见性的转换,c#,wpf,xaml,C#,Wpf,Xaml,因此,我有一个ProgressRing和一个TextBlock,我正在尝试实现这个基本的hack,即当TextBlock的文本被赋值(除null以外的任何值)时,显示这两个元素,否则当TextBlock的文本为null时,这两个元素都应该隐藏 我的Xaml如下所示。TextBlock的文本绑定到MessageForProgressRing,其可见性绑定到MessageForProgressRing和TargetNullValue。我也一样ProgressRing: <StackPa
ProgressRing
和一个TextBlock
,我正在尝试实现这个基本的hack,即当TextBlock的文本被赋值(除null以外的任何值)时,显示这两个元素,否则当TextBlock的文本为null时,这两个元素都应该隐藏
我的Xaml如下所示。TextBlock的文本绑定到MessageForProgressRing
,其可见性绑定到MessageForProgressRing
和TargetNullValue
。我也一样ProgressRing
:
<StackPanel Panel.ZIndex="100" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center">
<mahControls:ProgressRing Height="50" IsActive="True" Width="50" Visibility="{Binding MessageForProgressRing, TargetNullValue=Collapsed, FallbackValue=Visible}" Foreground="White" Margin="0,0,0.2,0" />
<TextBlock Text="{Binding MessageForProgressRing}" Visibility="{Binding MessageForProgressRing, TargetNullValue=Collapsed, FallbackValue=Visible}"/>
</StackPanel>
但是,在我的ViewModelBase
(我所有视图模型的父视图)中,它会在OnPropertyChanged
上弹出一个错误,说明:
找不到请求的值“正在关闭…”
我想我需要一个转换器,因为可见性绑定到关闭…
对吗?如果是,我如何实现它
另外,我无法在
OnPropertyChanged
中执行此操作,因为我看不到分配它的值。此外,我认为这不是一个好主意,因为它在执行之前、执行期间和执行之后都会被大量调用。我通常更喜欢在视图模型中使用布尔属性来解决这个问题(例如HasMessageForProgressRing或IsProgressRingVisible)。它通常是一种更通用的解决方案。然后你可以使用一个
如果您确实想要实现一个转换器,只需创建一个实现该转换器的类。对于您的简单用例来说,这一实现应该是小菜一碟。在大多数情况下是不必要的(在你的情况下也不会)。它看起来像这样:
public class NullToCollapsed : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
你对此做过研究吗?在谷歌上搜索“wpf-IValueConverter”会得到大量的示例和教程,比如。@Charles是的,但一旦我知道关键词是什么(IValueConverter?)。谢谢我在看我的搜索可能过于具体,我链接到的教程是“wpf转换器”的第一个热门教程。你可能会原谅我认为你没有调查此事!酷。我正在做那件事
public class NullToCollapsed : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}