본문으로 바로가기

C# Winform WPF #5

category C# WPF 2020. 6. 26. 11:16

안녕하세요~! 문쑹입니다 :)

 

데이터 바인딩
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 파일 선택 추가 및 내용 확인
  1. Notifier를 상속받은 Product(Title,Price,Color,Reference)
  2. 내 속성이 변경되면 OnPropertyChanged 이벤트 호출
  3. 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