Wpf MVVM-在绑定属性不存在时隐藏控件

Wpf MVVM-在绑定属性不存在时隐藏控件,wpf,xaml,binding,mvvm,visibility,Wpf,Xaml,Binding,Mvvm,Visibility,我想知道如果视图模型中不存在控件绑定到的属性,是否可以隐藏视图上的控件。例如,如果我有以下内容: <CheckBox Content="Quote" IsChecked="{Binding Path=IsQuoted}" /> 我是否可以在XAML中检测到视图模型上不存在IsQuoted属性,并简单地隐藏该实例中的控件 我本质上是在创建一个向导对话框,该对话框在视图模型集合中移动,显示每个模型的关联视图。对于集合中的某些视图模型,“IsQuoted”属性将存

我想知道如果视图模型中不存在控件绑定到的属性,是否可以隐藏视图上的控件。例如,如果我有以下内容:

<CheckBox Content="Quote"
          IsChecked="{Binding Path=IsQuoted}" />

我是否可以在XAML中检测到视图模型上不存在IsQuoted属性,并简单地隐藏该实例中的控件

我本质上是在创建一个向导对话框,该对话框在视图模型集合中移动,显示每个模型的关联视图。对于集合中的某些视图模型,“IsQuoted”属性将存在,而对于某些视图模型则不存在

我希望在这些视图之外有一个复选框,该复选框在当前视图模型具有该属性时显示,在视图模型不具有该属性时隐藏。所有视图模型都是从一个公共基类派生的,但我不希望通过添加“ShowQuoted”属性等来扰乱基类


想法?而且,提前感谢…

使用始终返回Visibility.Visible的转换器处理存在值的情况。通过指定回退值来处理该值不存在的情况。当属性不存在时,绑定将失败并接收回退值

<Page.DataContext>
    <Samples:OptionalPropertyViewModel/>
</Page.DataContext>
<Grid>
    <Grid.Resources>
        <Samples:AlwaysVisibleConverter x:Key="AlwaysVisibleConverter" />
    </Grid.Resources>
    <CheckBox 
        Content="Is quoted" 
        IsChecked="{Binding IsQuoted}"
        Visibility="{Binding IsQuoted, 
                     Converter={StaticResource AlwaysVisibleConverter}, 
                     FallbackValue=Collapsed}"
        />
</Grid>

public class OptionalPropertyViewModel
{
    public bool IsQuoted { get; set; }
}

public class AlwaysVisibleConverter : IValueConverter
{
    #region Implementation of IValueConverter

    public object Convert(object value, 
                          Type targetType, object parameter, CultureInfo culture)
    {
        return Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, 
                              object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

公共类OptionalPropertyViewModel
{
公共bool被引用为{get;set;}
}
公共类AlwaysVisibleConverter:IValueConverter
{
#IValueConverter的区域实现
公共对象转换(对象值,
类型targetType,对象参数,CultureInfo区域性)
{
返回可见性。可见;
}
公共对象转换回(对象值,类型targetType,
对象参数,CultureInfo(区域性)
{
抛出新的NotImplementedException();
}
#端区
}

很酷。我已经使用WPF四年了,但我从未注意到FallbackValue属性(或者我注意到了,只是当时没有注意——很难说)。这可能很有用。如果你想更明确一些,你可以检查dependencProperty.UnsetValue聪明,@Phil@OwenJohnson,如果属性不存在,则无法检查未设置的值。UnsetValue是存在但没有值的属性的哨兵值。在这种情况下,某些对象上不存在该属性。