안녕하세요, 갓 WPF에 입문한 뉴비 학생입니다.
유튜브의 튜토리얼을 따라 공부하고 있는데요, DataGrid를 이용하여 MVVM패턴을 설명하는 영상에서 의문점이 생겨 질문을 드립니다.
ViewModel:
#ViewModel
internal class MainWindowViewModel : INotifyPropertyChanged
{
public ObservableCollection<Item> Items { get; set; }
public MainWindowViewModel()
{
# Item 1
# Item 2
# ...
}
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler? PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
View:
<Window x:Class="MVVMTutorial.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"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="500">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<DataGrid
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"
CanUserAddRows="False"
CanUserDeleteRows="False" />
<StackPanel Grid.Column="1">
<Label Content="Name"/>
<TextBox Margin="5,0,5,15"
Text="{Binding SelectedItem.Name, UpdateSourceTrigger=PropertyChanged}"/>
<Label Content="Serial Number"/>
<TextBox Margin="5,0,5,15"/>
<Label Content="Quantity"/>
<TextBox Margin="5,0,5,15"/>
</StackPanel>
</Grid>
</Window>
Model:
internal class Item
{
public string Name { get; set; }
public string SerialNumber { get; set; }
public int Quantity { get; set; }
}
영상을 보면 대강 이런 식으로 구현하는데요, (영상에서 처럼 ViewModelBase를 따로 둬서 INotifyPropertyChanged 인터페이스의 이벤트와 OnPropertyChanged() 메서드를 구현하는 걸 따로 빼는 부분은 생략했습니다)
Selected Item이 바뀜에 따라 UI가 업데이트 되야하니까 ViewModel에 INotifyPropertyChanged를 구현하는 건 이해가 됩니다.
하지만 그렇다면 왜 Model에는 INotifyPropertyChanged를 구현하지 않은 것일까요? 영상의 예제에서는 이를 구현하지 않았음에도, TextBox를 통해 SelectedItem.Name과 같은 Model의 프로퍼티를 수정하면 DataGrid에도 즉시 반영되어 UI가 업데이트됩니다. 저는 Model에도 INotifyPropertyChanged가 구현되어 있어야 이러한 동작이 가능하다고 생각했는데, 그렇지 않아도 View에 변경 사항이 전달되는 이유가 이해되지 않아 질문드립니다.
혹시라도 질문이 불명확하거나 이상한 점이 있다면, 알려주시면 감사하겠습니다. 답변주시는 고수님들 항상 감사드립니다.

