刚学的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));
}