2014-12-17 2 views
1

진행률 표시 줄에 대해 INotifyPropertyChanged를 구현하는 방법에 대한 자습서를 진행할 예정이며 다소 혼란 스럽다고 생각됩니다.WPF 용 INotifyPropertyChanged를 구현하는 방법 ProgressBar

이 내 XAML 코드 조각입니다 :

<ProgressBar Name="progressBar" Height="24" IsIndeterminate="{Binding IsIndeterminate}" Minimum="{Binding Minimum}" Maximum="{Binding Maximum}" Value="{Binding ProgressValue}"/> 

이 내입니다 코드 숨김 니펫을 내 ProgressBar를 업데이트됩니다 있도록 내가 설정 내가 매번에서 INotifyPropertyChanged를 구현하려면 어떻게

 public partial class MainWindow : System.Windows.Window { 
      public bool IsInderteminate { get; set; } 
      public double Minimum { get; set; } 
      public double Maximum { get; set; } 
      public double ProgressValue { get; set; } 


      public MainWindow() { 
       InitializeComponent(); 
       this.progressBar.DataContext = this; 
       this.IsInderteminate = false; 
      } 


     private void btnLoadPremiumDetail_Click(object sender, RoutedEventArgs e) { 
        this.IsInderteminate = true; 
        // I do my work here 
        this.IsInderteminate = false; 
      } 


      private void _ValidateProcurementDetail() { 

       for (int i = 0; i < rowCount; i++) { 
        this.ProgressValue += 1; 
        //I do work here 
       } 
    } 
} 

ProgressValue 또는 IsIndeterminate? 여기

+1

을 어느 당신은 문제가있는 부분입니까? 인터페이스 구현? 이벤트 일어나기? 또는 무엇을? [this] (http://msdn.microsoft.com/en-us/library/ms743695%28v=vs.110%29.aspx)를 확인 했습니까? –

답변

1

을 수행하는 방법 : 당신과 같이 인텔리을 얻을 수 있도록 XAML에서

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.progressBar.DataContext = this; 
     this.IsInderteminate = false; 
    } 

    private bool _isInderteminate = false; 

    public bool IsInderteminate 
    { 
     get { return _isInderteminate; } 

     set 
     { 
      if (_isInderteminate == value) 
      { 
       return; 
      } 

      _isInderteminate = value; 
      OnPropertyChanged(); 
     } 
    } 

    private double _minimum; 

    public double Minimum 
    { 
     get { return _minimum; } 

     set 
     { 
      if (_minimum == value) 
      { 
       return; 
      } 

      _minimum = value; 
      OnPropertyChanged(); 
     } 
    } 

    private double _maximum; 

    public double Maximum 
    { 
     get { return _maximum; } 

     set 
     { 
      if (_maximum == value) 
      { 
       return; 
      } 

      _maximum = value; 
      OnPropertyChanged(); 
     } 
    } 

    private double _progressValue; 

    public double ProgressValue 
    { 
     get { return _progressValue; } 

     set 
     { 
      if (_progressValue == value) 
      { 
       return; 
      } 

      _progressValue = value; 
      OnPropertyChanged(); 
     } 
    } 

    private void btnLoadPremiumDetail_Click(object sender, RoutedEventArgs e) 
    { 
     this.IsInderteminate = true; 
     // I do my work here 
     this.IsInderteminate = false; 
    } 


    private void _ValidateProcurementDetail() 
    { 

     for (int i = 0; i < rowCount; i++) 
     { 
      this.ProgressValue += 1; 
      //I do work here 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Mode=TwoWay 바인딩 추가 할, 당신은 또한 XAML에서 직접 DataContext를 설정할 수 :

DataContext="{Binding RelativeSource={RelativeSource Self}}" 
+0

다른 속성에도 OnPropertyChanged를 추가했습니다. UI에서 변경 사항을 캡처하려는 경우를 대비하여 – Usama

+0

NotifyPropertyChangedInvocator 및 CallerMemberName을 포함하는 네임 스페이스는 무엇입니까? –

+0

이들은 resharper 헬퍼 태그입니다 ... 당신은 항상 onpropertyChanged 메서드 내에서 propertyName을 전달하여 calssic 접근법을 사용할 수 있습니다. – Usama

관련 문제