xaml 초보임...


Visual Studio 2017, Prism Nuget설치해서 하고있음


Mainwindow이 있고 그 안에 Usercontrol1, usercontrol2가 있고


Usercontrol1과 2안에는 각각 버튼이 하나씩 존재하고있음


구현하고싶은건 Mainwindow에 있는 Usercontrol1의 버튼이 눌렸을 때 Visibility 속성을 Hidden으로 변경하고 Usercontrol2는 Visible로 바뀌고 그 반대로

UserControl2의 버튼이 눌렸을 때 Hidden이 되고 Usercontrol1이 Visible로 변하는거임


구상하기에는 Usercontrol1에서 Visible의 속성 변경이 감지됨 -> Mainwindow에서 Usercontrol1의 속성 변화를 감지하여 Visible인지 Hidden인지 확인함 -> Hidden이면 Usercontrol2의 Visible 속성을 Visible로 변경해줌.

간단할 줄 알았는데 어째선지 Visible속성이 변경되었다는걸 어떻게 받아오는지 전혀 감이 안와 헬프;


[MainWindow.xaml]

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:local="clr-namespace:Testing.Views"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525">
   
       
       
   



[MainWindowViewModel.cs]

using System;
using System.Windows;
using Prism.Commands;
using Prism.Mvvm;
using Testing.Views;

namespace Testing.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private string _title = "Prism Application";
        public string Title
        {
            get => _title;
            set => SetProperty(ref _title, value);
        }

        private Visibility ctrlVisibility;
        public Visibility CtrlVisibility
        {
            get => ctrlVisibility;
            set => SetProperty(ref ctrlVisibility, value);
        }
    }
}


[PrismUserControl1.xaml]

             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
             xmlns:prism="http://prismlibrary.com/"            
             prism:ViewModelLocator.AutoWireViewModel="True">
   
       
           
       

   

   
        <Button Command="{Binding CmdClick}">1</Button>
   



[PrismUserControl1ViewModel.cs]

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using Testing.Views;

namespace Testing.ViewModels
{
    public class PrismUserControl1ViewModel : BindableBase
    {
        PrismUserControl1 thisCtrl;
        private DelegateCommand cmdLoad;
        public DelegateCommand CmdLoad =>
            cmdLoad ?? (cmdLoad = new DelegateCommand((e) =>
            {
                thisCtrl = e.Source as PrismUserControl1;
            }));

        private DelegateCommand cmdClick;
        public DelegateCommand CmdClick =>
            cmdClick ?? (cmdClick = new DelegateCommand(ExecuteCmdClick));

        void ExecuteCmdClick()
        {
            Console.WriteLine("유저컨트롤1 내부 클릭");
            thisCtrl.Visibility = Visibility.Hidden;
        }
    }
}


Usercontrol2는 1과 똑같은 모양이므로 패스