2011-02-15 6 views
0

내 DataGrid에서 포어 그라운드 (텍스트)를 설정할 색을 결정하는 DataTrigger가 있습니다. 이 값은 내 페이지의 속성으로 저장됩니다.WPF ToolKit Datagrid 새로 고침 바인딩

나는이 모든 작업을 멋지게 처리했지만 이제는 사용자가이 색을 직접 설정할 수있는 기능을 제공하고 있습니다.

사용자가이 색을 설정하고 속성을 업데이트 할 때 내 문제가 발생합니다.이 변경 사항을 데이터 그리드에 반영시키는 방법은 무엇입니까?

나는 아래 뭐하는 거지의 예 (PrivateMessages 다른 색상 인 쇼)

<DataTrigger Binding="{Binding Path=IsPrivate}" Value="True">          
    <Setter Property="Foreground" Value="{Binding ElementName=GridPage, Path=PrivateMessageColour}" /> 
</DataTrigger> 

어떤 도움이나 지침은 가장 극명하게 될 것이다.

미리 감사드립니다.

답변

0

유형이 INotifyPropertyChanged 인터페이스를 구현하고 색상을 수정할 때 DataTrigger이 공개적으로 노출 된 속성의 설정자에 대해 변경 알림을 시작해야합니다.

편집 : 아래 ... 색상을 변경하는 TextBoxButton를 사용하는 예입니다

C 번호 :

public partial class Window1 : Window 
{ 
    MyData _data = new MyData(); 

    public Window1() 
    { 
     InitializeComponent(); 

     this.DataContext = _data; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     _data.ChangeColor(); 
    } 
} 

    public class MyData : INotifyPropertyChanged 
    { 
     Random _rand = new Random(); 
     List<String> _colors = new List<string> { "Red", "Black", "Blue" }; 

     public void ChangeColor() 
     { 
      MyColor = _colors[_rand.Next(0, 3)]; 
     } 

     private bool _isActive = true; 
     public bool IsActive 
     { 
      get 
      { 
       return _isActive; 
      } 
      set 
      { 
       _isActive = value; 
       PropertyChangedEventHandler h = PropertyChanged; 
       if (h != null) 
        h(this, new PropertyChangedEventArgs("IsActive")); 
      } 
     } 


     private String _myColor = "Green"; 
     public String MyColor 
     { 
      get 
      { 
       return _myColor; 
      } 
      set 
      { 
       _myColor = value; 
       PropertyChangedEventHandler h = PropertyChanged; 
       if (h != null) 
        h(this, new PropertyChangedEventArgs("MyColor")); 
      } 
     } 

     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     #endregion 
    } 
} 

XAML : 이것을위한

<Grid> 
     <Button Height="25" Click="Button_Click" Content="Change Color" VerticalAlignment="Bottom" /> 
     <TextBox Width="200" Height="100"> 
      <TextBox.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsActive}" Value="true"> 
          <Setter Property="TextBox.Background" Value="{Binding MyColor}"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBox.Style> 
     </TextBox> 
    </Grid> 
+0

감사합니다 데이터 트리거가 작동하고있는 컬렉션입니다. INotifyPropertyChanged를 구현했습니다. 세터와 문제가 있습니다. 그는 재산도 이것을 사용합니까? – Emlyn

+0

@Emlyn 게시 한 코드에 따라 IsPrivate 속성이 PropertyChanged 이벤트 알림을 발생시키는 데 필요한 원본 속성입니다. –

+0

귀하의 의견을 보내 주셔서 감사합니다.하지만 저는 그 길을 떠나기 시작했습니다. 그리드가 텍스트가 표시되어야하는 색을 확인하고 이것이 변경된 경우 자체를 다시 그리도록 아마 어쩌면 필요합니다. 아마도 이벤트 트리거가 필요하다는 느낌을 받으면서 트리거를 구현하는 데 더 좋은 방법인지 알아볼 것입니다. – Emlyn