簡體   English   中英

WPF:如何將Visibility屬性綁定到xaml元素?

[英]WPF: How to bind a Visibility property to an xaml element?

我遇到一些問題,需要幫助。 我想將視圖模型的可見性屬性綁定到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;
    }

ViewModel:

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-property。

有任何想法嗎? 到目前為止謝謝。

您在執行綁定錯誤。 Visibility="{Binding ElementName=UiWelcomeVisibility}"設置元素的可見性等於另一個名為“ UiWelcomeVisibility”的可視元素 這有兩個問題:

  1. 首先,沒有名為“ UiWelcomeVisibility”的元素。
  2. 即使存在,視覺元素本身也不是Visibility屬性的有效值。

您想要的是改為將數據綁定到視圖模型。 假設您已經將DataContext設置為viewmodel,只需使用

<welcome:WelcomeScreen ... Visibility="{Binding UiWelcomeVisibility}" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM