2017-09-27 4 views
0

바인딩을 기반으로 파란색으로 선택된 항목을 표시하도록 listview를 설정하려고하지만 데이터 트리거가 실행되지 않습니다. 트리거 값을 0 (초기 값)으로 설정하면 listviewitems가 파란색 배경으로 생성되지만 이후에는 변경되지 않습니다.Wpf DataTrigger 속성 변경시 발생하지 않습니다.

VB 코드 :

Private Sub SetGridViewDynamically() 
    Dim myGridView As New GridView 
    myGridView.AllowsColumnReorder = True 

    Dim gvc1 As New GridViewColumn 
    gvc1.DisplayMemberBinding = New Binding("A") 
    gvc1.Header = "1" 
    gvc1.Width = TestListView.ActualWidth * 0.19 
    myGridView.Columns.Add(gvc1) 

    Dim gvc2 As New GridViewColumn 
    gvc2.DisplayMemberBinding = New Binding("B") 
    gvc2.Header = "2" 
    gvc2.Width = TestListView.ActualWidth * 0.39 
    myGridView.Columns.Add(gvc2) 

    Dim gvc3 As New GridViewColumn() 
    gvc3.DisplayMemberBinding = New Binding("C") 
    gvc3.Header = "3" 
    gvc3.Width = TestListView.ActualWidth * 0.19 
    myGridView.Columns.Add(gvc3) 

    Dim gvc4 As New GridViewColumn() 
    gvc4.DisplayMemberBinding = New Binding("D") 
    gvc4.Header = "4" 
    gvc4.Width = TestListView.ActualWidth * 0.19 
    myGridView.Columns.Add(gvc4) 

    TestListView.View = myGridView 

    Dim style As New Style 
    style.TargetType = GetType(ListViewItem) 
    style.Setters.Add(New Setter(ListViewItem.HorizontalContentAlignmentProperty, HorizontalAlignment.Center)) 
    Dim x = New DataTrigger 
    x.Binding = New Binding("rowselected") 
    x.Value = 0 
    x.Setters.Add(New Setter(TestListView.BackgroundProperty, DarkGradientSample.Background)) 

    Dim x2 = New Trigger 
    x2.Property = ItemsControl.AlternationIndexProperty 
    x2.Value = 1 
    x2.Setters.Add(New Setter(TestListView.BackgroundProperty, LightGradientSample.Background)) 

    Dim x3 As New DataTrigger 
    x3.Binding = New Binding("rowselected") 
    x3.Value = 1 
    x3.Setters.Add(New Setter(TestListView.BackgroundProperty, BlueGradientSample.Background)) 

    style.Triggers.Add(x) 
    style.Triggers.Add(x2) 
    style.Triggers.Add(x3) 

    TestListView.ItemContainerStyle = style 

End Sub 

문제의 목록보기에 대한 XAML :

<ListView x:Name="TestListView" Grid.Column="1" Margin="10" Grid.Row="2" ItemsSource="{Binding picks}" FontSize="48" AlternationCount="2" Foreground="White" HorizontalContentAlignment="Stretch"> 

    </ListView> 

편집 : 알았어요. Inotifypropertychanged를 제대로 구현하지 못했습니다.

Public Class PickLocation 
    Implements INotifyPropertyChanged 

    Public Event PropertyChanged As PropertyChangedEventHandler _ 
     Implements INotifyPropertyChanged.PropertyChanged 

    Private Sub NotifyPropertyChanged(<CallerMemberName()> Optional ByVal propertyName As String = Nothing) 
     RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) 
    End Sub 


    Private _rowselected As Integer 
    Public Property rowselected() As Integer 
     Get 
      Return _rowselected 
     End Get 

     Set(ByVal value As Integer) 
      If Not(value = _rowselected) Then 
       _rowselected = value 
       NotifyPropertyChanged() 
      End If 
     End Set 
    End Property 
End Class 
+0

가 rowselected 클래스를합니까 정의 : 여기에 인터페이스가 제대로

Public Class PickLocation Implements INotifyPropertyChanged Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private _rowselected As Integer Public Property rowselected As Integer Get Return _rowselected End Get Set(value As Integer) _rowselected = value RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("rowselected")) End Set End Property 
mm8

+0

아, 인터페이스를 구현하지 않았습니다. 나는 지금이지만, 아직 발사하지 않고있다. 클래스를 표시 할 게시물을 편집했습니다. – MWFBrad

+1

속성 설정자의 이벤트를 제기하지 않았습니다. – mm8

답변

1

이 속성을 새로운 값으로 설정 될 때마다 PropertyChanged 이벤트를 INotifyPropertyChanged를 구현하고 인상해야한다 귀하의 클래스가

클래스에서 구현 것 INotifyPropertyChanged를 구현합니까?
관련 문제