일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- WPF
- mysql
- csharp
- logging
- dotNET
- ListView
- log
- Binding
- IValueConverter
- git
- algorithm
- windows
- C#
- programmers
- windows10
- Visual Studio
- Github
- string
- Microsoft
- 코딩테스트
- File
- commit
- nullable
- convert
- Coding
- tls
- .net
- chashtag
- coding-test
- Process
Archives
- Today
- Total
CHashtag
[C#][WPF] MVVM패턴 CheckBox 양방향 Binding 본문
반응형
안녕하세요.
오늘은 MVVM패턴에서 CheckBox의 값을 ViewModel로 전달하고, 또 그 반대로 ViewModel에서 값을 CheckBox로 전달하는 방법에 대해 알아보도록 하겠습니다.
// MainViewModel.cs
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace WpfApp14
{
public class MainViewModel : INotifyPropertyChanged
{
private bool _isChecked = false;
public bool IsChecked
{
get => _isChecked;
set
{
_isChecked = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
}
<!-- MainWindow.xaml -->
<Window x:Class="WpfApp14.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp14"
mc:Ignorable="d"
Title="MainWindow" Height="150" Width="300">
<Grid>
<StackPanel Margin="5">
<CheckBox x:Name="CheckBox1" IsChecked="{Binding IsChecked}" Content="눌러보세요" FontSize="20"/>
<CheckBox x:Name="CheckBox2" IsChecked="{Binding IsChecked}" Content="얘도 눌러보세요" FontSize="20"/>
</StackPanel>
</Grid>
</Window>
// MainWindow.xaml.cs
using System.Windows;
namespace WpfApp14
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private MainViewModel _viewModel;
public MainWindow()
{
InitializeComponent();
_viewModel = new MainViewModel();
this.DataContext = _viewModel;
}
}
}
코드를 실행시켜보면 CheckBox를 하나만 클릭하여도 2개 모두 선택, 선택 해제되는 것을 보실 수 있습니다.
그 이유는 간단합니다.
CheckBox1이 클릭되었을 때, isChecked 값이 true가 되어 ViewModel의 값도 true로 변하고(set 되고), set 되어서 setter에서 INotifyPropertyChanged가 호출되어 View의 CheckBox2 값이 변하게 되는 것입니다.
감사합니다.
반응형
'C# > WPF' 카테고리의 다른 글
[C#] [WPF] DispatcherTimer 사용방법 (0) | 2021.02.24 |
---|---|
[C# WPF] Binding 값 자동 변환 Converter (IValueConverter, IMultiValueConverter) (1) | 2021.02.23 |
[C#] [WPF] MultiBinding StringFormat (여러개 동시 바인딩) (0) | 2021.02.21 |
[C# WPF] MVVM 패턴 ListView Filter (Binding) (2) | 2021.02.09 |
[C# WPF] MVVM 패턴 csv 파일 파싱 프로그램 (ListView, Binding, Prism) (0) | 2020.12.22 |