안녕하세요~! 문쑹입니다 :)
데이터 바인딩
INotifyPropertyChanged - 사용자가 속성을 업데이트하면 바인딩된 컨트롤도 업데이트 되어야할 때 이벤트 발생
데이터 객체에 속성 변경 이벤트가 필요
public class Notifier :INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged !=null)
{
PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
}
}
}
사용법
public class Car :Notifier
{
private double speed;
public double Speed
{
get {return speed;}
set
{
speed=value;
OnPropertyChanged("Speed");
}
}
INotifyCollectionChanged - 컬랙션 내용이 변경되면 알림을 생성하는 이벤트
- INotifyPropertyChanged는 사용자가 메시지 보내거 받을 때 모든 목록 내용 제거하고 다시 추가해야 함
- INotifyCollectionChanged는 컬렉션의 추가,제거 및 변경을 알릴 수 있음
1. 직접 인터페이스를 구현할 필요도 없음
Tutorial5
제품 및 세부 정보 표시
- ProductManagement.xaml 페이지 생성
- Notifier.cs 및 ProductsFactory.cs 파일 선택 추가 및 내용 확인
- Notifier를 상속받은 Product(Title,Price,Color,Reference)
- 내 속성이 변경되면 OnPropertyChanged 이벤트 호출
- In-memorydata로 표시된 접혀있는 코드 부분은 products제품 배열을 생성 100개의 제품을 랜덤으로 생성하는 로직
- ProductManagement.xaml 페이지 수정
- TextBox 이벤트 TextChanged 추가
- ProductManagement 클래스 상단과 TextChanged 이벤트 에 코드 추가
ProductsFactory factory = new ProductFactory();
private void TxtSearch_TextChanged(object sender, TextChangedEventArgs e)
{
DgrProducts.ItemsSource = factory.FindProducts(TxtSearch.Text);
}
화면 연결
Menu.xaml 파일 열어서 Products표시 버튼 더블클릭
private void BtnProducts_Click(object sender,RoutedEventArgs e)
{
NavigationService.Navigate
(
new Uri("/ProductsManagement.xaml",UriKind.RelativeOrAbsolute)
);
}
ProductManagement.xaml 파일 수정
Border요소 상세 정보 태그 입력 실행 후 상세 확인 및 값 변경 확인
<Border BorderBrush="Black" BorderThickness="1" Grid.Column="1"
Margin="9.566,10.151,9.698,10.113" Grid.Row="1"
DataContext="{Binding SelectedItem,ElementName=DgrProducts}">
<StackPanel Margin="10">
<TextBox Text="Productdetails" FontWeight="Bold" FontSize="16"
HorizontalAlignment="Center" Margin="10"/>
<TextBlock Text="Title"/>
<TextBox Text="{Binding Title, Mode=TwoWay}"/>
<TextBlock Text="Price"/>
<TextBox Text="{Binding Price, Mode=TwoWay}"/>
<TextBlock Text="Color"/>
<TextBox Text="{Binding Color, Mode=TwoWay}"/>
<Border Background="{Binding Color}" Height="10"/>
<TextBlock Text="Reference"/>
<TextBox Text="{Binding Reference, Mode=TwoWay}"/>
</StackPanel>
</Border>
'C# WPF' 카테고리의 다른 글
C# Winform WPF #4 (0) | 2020.06.25 |
---|---|
C# Winform WPF #3 (0) | 2020.06.23 |
C# Winform WPF #2 (0) | 2020.06.23 |
C# Winform WPF #1 (0) | 2020.06.23 |