... | ... | @@ -76,7 +76,9 @@ XAML 바인딩을 사용하면 아래와 같이 선언하여 의존성을 끊을 |
|
|
##### 3) INotifyPropertyChanged
|
|
|
속성간에 바인딩을 사용하여 연결하면 실제 데이터가 변경되어도 화면에는 반영되지 않는다.
|
|
|
따라서 이를 ViewModel에서 제어하기 위해 INotifyPropertyChanged를 사용하여 속성 값이 변경을 UI에 알리는 부분을 구현한다.
|
|
|
모든 ViewModel이 INotifyPropertyChanged를 구현해야하기 때문에 일반적으로 INotifyPropertyChanged를 구현한 ViewModelBase 클래스를 미리 정의해서 사용한다. (MVVM Light에서도 ViewModelBase 클래스를 제공한다)
|
|
|
모든 ViewModel이 INotifyPropertyChanged를 구현해야하기 때문에 일반적으로 INotifyPropertyChanged를 구현한 ViewModelBase 클래스를 미리 정의해서 사용한다.
|
|
|
|
|
|
(MVVM Light에서는 INotifyPropertyChanged를 구현해놓은 ViewModelBase 클래스를 제공한다)
|
|
|
|
|
|
```csharp
|
|
|
public class MainViewModel : INotifyPropertyChanged
|
... | ... | @@ -102,3 +104,35 @@ public class MainViewModel : INotifyPropertyChanged |
|
|
}
|
|
|
```
|
|
|
##### 4) ICommand
|
|
|
사용자와의 상호작용 처리를 위해서 이벤트 핸들러를 이용하여 코드를 작성하는데, 이는 View에 강한 의존성을 가지게 되고 Code-behind에만 선언가능하다. 이 상호작용 처리를 위해 Command를 사용하는데, ICommand 인터페이스를 사용하여 의존성을 제거할 수 있다.
|
|
|
Command 를 정의하면 XAML 기능을 이용하여 상호작용 처리가 가능한 모든 컨트롤에 연결할 수 있다.
|
|
|
|
|
|
(MVVM Light에서는 ICommand를 구현해놓은 RelayCommand를 제공한다)
|
|
|
|
|
|
```csharp
|
|
|
// 기존 방식
|
|
|
<Button Content="Click me" Click="OnButtonClicked" />
|
|
|
|
|
|
private void OnButtonClicked(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
//do something
|
|
|
}
|
|
|
|
|
|
// IComman 사용
|
|
|
public class ClickCommand : ICommand
|
|
|
{
|
|
|
public bool CanExecute(object parameter)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
public void Execute(object parameter)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
public event EventHandler CanExecuteChanged;
|
|
|
}
|
|
|
```
|
|
|
```csharp
|
|
|
// XAML 바인딩
|
|
|
<Button Content="Click me" Command="{Binding Path=ClickCommand}
|
|
|
``` |
|
|
\ No newline at end of file |