[C#프로그래밍] [WPF] PC 카카오톡 만들기 #12 - Dependency Injection(DI) IoC를 이용한 ViewModel간 데이터 전달
https://www.youtube.com/watch?v=_KXr5dGGS3s&list=PLlrfTSXS0LLKHfOfwM31jJw3SHuDnkF49&index=13
📌 폴더 재 세팅 및 View 수정
-LoginView.xaml
<UserControl x:Class="WpfDINavigation.Views.LoginView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfDINavigation.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
</UserControl.Resources>
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TextBlock Text="LoginView"
HorizontalAlignment="Center"
FontSize="35"
/>
<Border Grid.Row="1" Padding="50">
<StackPanel>
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="아이디"/>
<TextBox Grid.Column="1" Text="{Binding Id}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="비밀번호"/>
<TextBox Grid.Column="1" Text="{Binding Password}"/>
</Grid>
</StackPanel>
</Border>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Command="{Binding ToSignupCommand}"
Content="회원가입"
Margin="5"/>
<Button Command="{Binding ToTestCommand}"
Grid.Column="1"
Content="ToTest"
Margin="5"/>
</Grid>
</Grid>
</UserControl>
-SignupView.xaml
<UserControl x:Class="WpfDINavigation.Views.SignupView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfDINavigation.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
</UserControl.Resources>
<Grid Background="Yellow">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TextBlock Text="SignupView"
HorizontalAlignment="Center"
FontSize="35"
/>
<Border Grid.Row="1" Padding="50">
<StackPanel>
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="아이디"/>
<TextBox Grid.Column="1" Text="{Binding Id}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이름"/>
<TextBox Grid.Column="1" Text="{Binding Name}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이메일"/>
<TextBox Grid.Column="1" Text="{Binding Email}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="비밀번호"/>
<TextBox Grid.Column="1" Text="{Binding Password}"/>
</Grid>
</StackPanel>
</Border>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Command="{Binding ToLoginCommand}"
Content="ToLogin" Margin="5"/>
<Button Command="{Binding ToTestCommand}"
Grid.Column="1"
Content="ToTest" Margin="5"/>
</Grid>
</Grid>
</UserControl>
-TestView.xaml
<UserControl x:Class="WpfDINavigation.Views.TestView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfDINavigation.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<DataTemplate DataType="{x:Type viewmodels:LeftViewModel}">
<local:LeftView/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodels:RightViewModel}">
<local:RightView/>
</DataTemplate>
</UserControl.Resources>
<Grid Background="SkyBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TextBlock Text="TestView"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="35"
/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ContentControl Grid.Column="0"
Content="{Binding LeftViewModel}"
Margin="5"/>
<ContentControl Grid.Column="1"
Content="{Binding RightViewModel}"
Margin="5"/>
</Grid>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Command="{Binding ToSignupCommand}"
Content="ToSignup" Margin="5"/>
<Button Command="{Binding ToLoginCommand}"
Grid.Column="1"
Content="ToLogin" Margin="5"/>
</Grid>
</Grid>
</UserControl>
-LeftView.xaml
<UserControl x:Class="WpfDINavigation.Views.TestContols.LeftView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfDINavigation.Views.TestContols"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
</UserControl.Resources>
<Grid Background="AliceBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TextBlock Text="LeftView"
HorizontalAlignment="Center"
FontSize="35"
/>
<Border Grid.Row="1" Padding="50">
<StackPanel>
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="아이디"/>
<TextBox Grid.Column="1" Text="{Binding Id}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이름"/>
<TextBox Grid.Column="1" Text="{Binding Name}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이메일"/>
<TextBox Grid.Column="1" Text="{Binding Email}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="비밀번호"/>
<TextBox Grid.Column="1" Text="{Binding Password}"/>
</Grid>
</StackPanel>
</Border>
<Button Grid.Row="2"
Content="데이터 전송"
Command="{Binding SendAccountToRightCommand}"/>
</Grid>
</UserControl>
-RightView.xaml
<UserControl x:Class="WpfDINavigation.Views.TestContols.RightView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfDINavigation.Views.TestContols"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Control.FontSize" Value="20"/>
</Style>
</UserControl.Resources>
<Grid Background="GreenYellow">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TextBlock Text="RightView"
HorizontalAlignment="Center"
FontSize="35"
/>
<Border Grid.Row="1" Padding="50">
<StackPanel>
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="아이디"/>
<TextBox Grid.Column="1" Text="{Binding Id}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이름"/>
<TextBox Grid.Column="1" Text="{Binding Name}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이메일"/>
<TextBox Grid.Column="1" Text="{Binding Email}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="비밀번호"/>
<TextBox Grid.Column="1" Text="{Binding Password}"/>
</Grid>
</StackPanel>
</Border>
<Button Grid.Row="2"
Content="데이터 전송"
Command="{Binding SendAccountToLeftCommand}"/>
</Grid>
</UserControl>
📌 바인딩 추가하기
- 뷰가 완전히 바껴서 까불님의 코드를 복붙해왔더니 이미 바인딩이 되어있었기 때문에 .xaml 코드는 위 접힌 코드에 적어두었다.
◾ LoginViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using WpfDINavigation.Commands;
using WpfDINavigation.Services;
namespace WpfDINavigation.ViewModels.MainControlViewModels
{
public class LoginViewModel : ViewModelBase
{
//필드부분은 최상위에 두는 것이 관례이다.
private readonly INavigationService _navigationService;
private readonly SignupStore _signupStore;
private string _id = "";
private string _password = "";
private void ToSignup(object _)
{
_signupStore.CurrentAccount = new Models.Account { Id = Id, Password = Password };
_navigationService.Navigate(NaviType.SignupView);
}
private void ToTest(object _)
{
_navigationService.Navigate(NaviType.TestView);
}
public LoginViewModel(INavigationService navigationService, SignupStore signupStore)
{
_navigationService = navigationService;
_signupStore = signupStore;
ToSignupCommand = new RelayCommand<object>(ToSignup);
ToTestCommand = new RelayCommand<object>(ToTest);
}
public string Id
{
get { return _id; }
set
{
if (_id != value)
{
//아이디 변경이 있는 경우 OnPropertyChanged
_id = value;
OnPropertyChanged();
}
}
}
public string Password
{
get { return _password; }
set
{
if (_password != value)
{
//비번 변경이 있는 경우 OnPropertyChanged
_password = value;
OnPropertyChanged();
}
}
}
public ICommand ToSignupCommand { get; set; }
public ICommand ToTestCommand { get; set; }
}
}
◾ LoginView → SignupView
1. Stores 폴더에 클래스 SignupStroe.cs 파일 생성
- SignupStore.cs
namespace WpfDINavigation.Stores
{
public internal class SignupStore
{
//모델을 전송 할 수 있도록 모델 생성
public Account MyProperty { get; set; }
}
}
2. Models 폴더에 클래스 Account.cs 파일 생성
-Account.cs
namespace WpfDINavigation.Models
{
public internal class Account
{
public string ID { get; set; } = default!;
public string Password { get; set; } = default!;
public string name { get; set; } = default!;
public string Email { get; set; } = default!;
}
}
다시 SignupStore 로 돌아가서 Control + . 눌러서 네임스페이스에 Account 추가 및 이름 변경
- SignupStore.cs
namespace WpfDINavigation.Stores
{
public class SignupStore
{
//모델을 전송 할 수 있도록 모델 생성
public Account CurrentAccount { get; set; }
}
}
3. SignupStore를 Service에 등록
public partial class App : Application
{
//자기 자신을 호출 Current은 타입이 Application이기 때문에 App 타입으로 으로 변환
public new static App Current => (App)Application.Current;
private IServiceProvider ConfigureServices()
{
var services = new ServiceCollection();
// Stores
services.AddSingleton<MainNavigationStore>();
services.AddSingleton<SignupStore>();
...
- LoginViewModel.cs
private void ToSignup(object _)
{
// 네비게이트 전 signupStore 에 CurrentAccount 전달
// id, pw는 기존 프로퍼티에 있던 것들 을 넣어준다.
_signupStore.CurrentAccount = new Models.Account { Id = Id, Password = Password };
_navigationService.Navigate(NaviType.SignupView);
}
private void ToTest(object _)
{
_navigationService.Navigate(NaviType.TestView);
}
//생성자 부분에 SignupStore 호출을 받아준다.
public LoginViewModel(INavigationService navigationService, SignupStore signupStore)
{
_navigationService = navigationService;
_signupStore = signupStore;
ToSignupCommand = new RelayCommand<object>(ToSignup);
ToTestCommand = new RelayCommand<object>(ToTest);
}
...
- SignupViewModel.cs
public class SignupViewModel : ViewModelBase
{
private readonly INavigationService _navigationService;
private readonly SignupStore _signupStore;
...
//Initialize생성
private void Initialize()
{
Id = CurrentAccount.Id;
Password = CurrentAccount.Password;
}
//생성자에 signupStore 추가
public SignupViewModel(INavigationService navigationService, SignupStore signupStore,)
{
_navigationService = navigationService;
_signupStore = signupStore;
Initialize();
ToLoginCommand = new RelayCommand<object>(ToLogin);
ToTestCommand = new RelayCommand<object>(ToTest);
}
4. 바인딩 처리
- SignupView.xaml
...
<TextBlock Grid.Column="0" Text="아이디"/>
<TextBox Grid.Column="1" Text="{Binding Id}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이름"/>
<TextBox Grid.Column="1" Text="{Binding Name}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이메일"/>
<TextBox Grid.Column="1" Text="{Binding Email}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="비밀번호"/>
<TextBox Grid.Column="1" Text="{Binding Password}"/>
</Grid>
</StackPanel>
...
◾ SignupView → TestView
1. LeftView
- Stores에 클래스 LeftStore, RightStore 추가
- LeftStore .cs
namespace WpfDINavigation.Stores
{
public class LeftStore
{
public Account? CurrentAccount { get; set; }
}
}
- Rightstore.cs
namespace WpfDINavigation.Stores
{
public class RightStroe
{
public Account? CurrentAccount { get; set; }
}
}
- 서비스 등록
- App.xaml.cs
// Stores
services.AddSingleton<MainNavigationStore>();
services.AddSingleton<SignupStore>();
services.AddSingleton <LeftStore>();
services.AddSingleton<RightStroe>();
- SignupViewModel.cs
private void ToTest(object _)
{
_leftStore.CurrentAccount = new Account()
{
Id = Id,
Password = Password,
Name = Name,
Email = Email,
};
_navigationService.Navigate(NaviType.TestView);
}
...
//생성자에 signupStore , LeftStore추가
public SignupViewModel(INavigationService navigationService, SignupStore signupStore, LeftStore leftStore)
{
_navigationService = navigationService;
_signupStore = signupStore;
_leftStore = leftStore;
Initialize();
ToLoginCommand = new RelayCommand<object>(ToLogin);
ToTestCommand = new RelayCommand<object>(ToTest);
}
- ViewModel 작성
- LeftViewModel.cs
namespace WpfDINavigation.ViewModels.TestControlViewModel
{
public class LeftViewModel : ViewModelBase
{
private readonly LeftStore _leftStore;
public LeftViewModel(LeftStore leftStore)
{
this._leftStore = leftStore;
}
}
}
- LeftView에서 바인딩 처리
- LeftView.xaml
<Border Grid.Row="1" Padding="50">
<StackPanel>
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="아이디"/>
<TextBox Grid.Column="1" Text="{Binding Id}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이름"/>
<TextBox Grid.Column="1" Text="{Binding Name}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="이메일"/>
<TextBox Grid.Column="1" Text="{Binding Email}"/>
</Grid>
<Grid Height="50" Margin="0 5 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="비밀번호"/>
<TextBox Grid.Column="1" Text="{Binding Password}"/>
</Grid>
</StackPanel>
</Border>
- ViewModel 추가 수정 (속성추가)
- LeftViewModel.cs
public class LeftViewModel : ViewModelBase
{
private string _id = "";
private string _password = "";
private string _name = "";
private string _email = "";
private readonly LeftStore _leftStore;
private Account CurruntAccount => _leftStore.CurrentAccount!;
private void Initialize()
{
Id = CurruntAccount.Id;
Password = CurruntAccount.Password;
Name = CurruntAccount.Name;
Email = CurruntAccount.Email;
}
public string Id
{
get { return _id; }
set
{
if (_id != value)
{
_id = value;
OnPropertyChanged();
}
}
}
public string Password
{
get { return _password; }
set
{
if (_password != value)
{
_password = value;
OnPropertyChanged();
}
}
}
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged();
}
}
}
public string Email
{
get { return _email; }
set
{
if (_email != value)
{
_email = value;
OnPropertyChanged();
}
}
}
public LeftViewModel(LeftStore leftStore)
{
this._leftStore = leftStore;
Initialize();
}
}
}
- 상단에 xmlns:viewmodels="clr-namespace:WpfDINavigation.ViewModels" 형식으로 지정되어있던 경로가 폴더생성이 되다보니 인식을 하지 못해서 xmlns:viewmodels="clr-namespace:WpfDINavigation.ViewModels.TestControlViewModel" 과 같이 하위폴더를 명확하게 지정해 주었다.
- 실행을 해 보면, 아이디 비밀번호를 입력하고 회원가입을 누르면 그대로 데이터 전송이 되는 것을 볼 수 있다.
📌데이터 전송 기능 구현하기
- 같은 TestView에 있기 때문에 네비게이트는 하지 않아도 된다.
- LeftViewModel.cs
private Account CurrentAccount => _leftStore.CurrentAccount!;
private void SendAccountToRight(object _)
{
_rightStore.CurrentAccount = new Account
{
Id = Id,
Password = Password,
Name = Name,
Email = Email,
};
}
public LeftViewModel(LeftStore leftStore, RightStore rightStore)
{
_leftStore = leftStore;
_rightStore = rightStore;
SendAccountToRightCommand = new RelayCommand<object>(SendAccountToRight);
Initialize();
_leftStore.CurrentAccountChanged += CurrentAccountChanged;
}
public LeftViewModel(LeftStore leftStore, RightStore rightStore)
{
_leftStore = leftStore;
_rightStore = rightStore;
SendAccountToRightCommand = new RelayCommand<object>(SendAccountToRight);
Initialize();
_leftStore.CurrentAccountChanged += CurrentAccountChanged;
}
...
public ICommand SendAccountToRightCommand { get; set; }
- LeftView.xaml
<Button Grid.Row="2"
Content="데이터 전송"
Command="{Binding SendAccountToRightCommand}"/>
- rightView에도 똑같이 작업을 해 준다.