0

助けが必要な問題があります。ビューモデルの可視性プロパティを 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 のプロパティUiWelcomeVisibilityUiBackendVisibilityにバインドされています。これらのプロパティは、次のように定義されています。

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;
    }
}

ここではコーディングの間違いは見当たりません (実際、実行時に間違いはありません) が、BackendUI-visibility-property は UIModel の UiBackendVisibility によって変更されません。

何か案は?これまでありがとう。

4

1 に答える 1

1

あなたはバインディングを間違っています。「UiWelcomeVisibility」という名前の別のビジュアル要素Visibility="{Binding ElementName=UiWelcomeVisibility}"と同じ要素の可視性を設定します。これには 2 つの問題があります。

  1. そもそも「UiWelcomeVisibility」という要素がありません。
  2. Visibilityあったとしても、ビジュアル要素自体はプロパティの有効な値ではありません。

あなたが望むのは、代わりにビューモデルにデータバインドすることです。をすでにビューモデルに設定していると仮定してDataContext、使用するだけです

<welcome:WelcomeScreen ... Visibility="{Binding UiWelcomeVisibility}" />
于 2013-09-30T09:28:27.427 に答える