WPF:如何将可见性属性绑定到 xaml 元素
本文关键字:绑定 xaml 元素 属性 可见性 WPF | 更新日期: 2023-09-27 18:33:14
我有一些问题需要帮助。我想将视图模型中的可见性属性绑定到 xaml 元素,以便通过更改视图模型中的值来获得一些视觉更改(在这种情况下是折叠或显示)。
我得到了这个 xaml
<Window x:Class="PampelMuse.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:welcome="clr-namespace:PampelMuse.Views.Welcome"
xmlns:backend="clr-namespace:PampelMuse.Views.Backend"
xmlns:pampelMuse="clr-namespace:PampelMuse" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
Title="PampelMuse" Height="670" Width="864">
<Grid>
<Image HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Source="Resources/Images/Backgrounds/4.jpg" Stretch="UniformToFill" />
<welcome:WelcomeScreen x:Name="UIWelcome" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding ElementName=UiWelcomeVisibility}" />
<backend:BackendUI x:Name="UIBackend" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Visibility="{Binding ElementName=UiBackendVisibility}" />
</Grid>
您所看到的可见性绑定到 UIModel 中的属性 UiWelcomeVisibility 和 UiBackendVisibility。这些属性现在定义如下:
public partial class MainWindow : Window
{
private ViewModel.ViewModel ViewModel = PampelMuse.ViewModel.ViewModel.GetInstance();
public MainWindow()
{
InitializeComponent();
DataContext = ViewModel; // Setting the data context what effects all the xaml elements in this component too, including UIWelcome and BackendUI
ViewModel.UIModel.UiBackendVisibility = Visibility.Collapsed;
}
视图模型:
public class ViewModel
{
private static ViewModel instance = new ViewModel();
public UIModel UIModel = UIModel.GetInstance();
public static ViewModel GetInstance()
{
return instance;
}
}
和UIModel:
public class UIModel
{
private static UIModel instance = new UIModel();
public Visibility UiWelcomeVisibility { get; set; }
public Visibility UiBackendVisibility { get; set; }
public static UIModel GetInstance()
{
return instance;
}
}
我只是在这里没有看到任何编码错误(实际上我在运行时没有得到一些错误),但是 UIModel 的 UiBackendVisibility 并没有更改 BackendUI 可见性属性。
有什么想法吗?到目前为止谢谢。
你做错了绑定。 Visibility="{Binding ElementName=UiWelcomeVisibility}"
设置元素的可见性等于另一个名为"UiWelcomeVisibility"的可视元素。这有两个问题:
- 首先没有名为"UiWelcomeVisibility"的元素。
- 即使存在,可视元素本身也不是
Visibility
属性的有效值。
您想要的是将数据绑定到视图模型。假设您已经将DataContext
设置为视图模型,只需使用
<welcome:WelcomeScreen ... Visibility="{Binding UiWelcomeVisibility}" />