C# MVVM模式下给visibility赋初值不好用

刚学的MVVM模式,然后给xaml里面控件的visibility绑定vm里面的属性,想动态控制他的显示和隐藏,但是绑定完赋初值不好用,想隐藏的控件还是没有隐藏

小魔女参考了bing和GPT部分内容调写:
MVVM模式下,给visibility赋初值不好用可能是因为没有设置正确的绑定方式。在xaml中,可以通过绑定vm里面的属性来控制控件的显示和隐藏。例如:

<Button Visibility="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}" />

其中IsVisible是vm里面的属性,BooleanToVisibilityConverter是转换器,用于将bool值转换为Visibility值,代码如下:

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (bool)value ? Visibility.Visible : Visibility.Collapsed;
    }

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

另外,在vm中,要给IsVisible赋初值,例如:

public class MyViewModel
{
    public bool IsVisible { get; set; }

    public MyViewModel()
    {
        IsVisible = false;
    }
}

这样,就可以正确的给visibility赋初值,控制控件的显示和隐藏了。
回答不易,记得采纳呀。

1.你的vm没有继承可通知类,也没有使用框架的依赖注入,如果没有这个IsVisible属性可看看代码是不是没有绑定DataContext
2.控制显示与隐藏可通过另外一种验证方式:替换想要的控件就行,DataTrigger 触发器

<TextBlock >
                                        <TextBlock.Style>
                                            <Style TargetType="{x:Type TextBlock}">
                                                <Setter Property="Text" Value="{Binding CheckCondition.RemarksContent}" />
                                                <Style.Triggers>
                                                    <DataTrigger Binding="{Binding CheckCondition.RemarksContent}" Value="">
                                                        <Setter Property="Text" Value="未填写" />
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </TextBlock.Style>
                                    </TextBlock>

如果确保你的ViewModel属性在设置其值时,调用了PropertyChanged事件。例如,如果您的属性名称为IsVisible,则在属性设置器中应添加以下代码:

private bool _isVisible;
public bool IsVisible
{
    get { return _isVisible; }
    set
    {
        _isVisible = value;
        OnPropertyChanged(nameof(IsVisible));
    }
}

private void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}