2013-02-20 81 views
0

我創建了一個WPF ListBox並設置itemcontainerstyle綁定到屬性並將其轉換爲有效的顏色。
這適用於最初加載列表框時,所以綁定或轉換器沒有問題。WPF ListBox樣式更新doens't工作

  <ListBox Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Diensten}" 
        SelectedItem="{Binding SelectedDienst, Mode=TwoWay}" BorderBrush="LightGray" BorderThickness="2" Background="Transparent"> 
       <ListBox.ItemContainerStyle> 
        <Style TargetType="ListBoxItem"> 
         <Setter Property="Background" Value="{Binding Path=IsActive, Converter={StaticResource BooleanToListBoxBgColorConverter}}" /> 
        </Style> 
       </ListBox.ItemContainerStyle> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <telerik:Label Content="{Binding Path=Dienst.Description}"/> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

但是,當我selectedItem被改變,我觸發RefreshView方法中的PropertyChangedMethod來更新我的ListBox。
但不幸的是我的風格並不適用於綁定的新值。

如此看來,最初我的列表框創建的風格並沒有得到更新

Public Property Diensten() As List(Of ToegangDienst) 
     Get 
      Return _diensten 
     End Get 
     Set(value As List(Of ToegangDienst)) 
      _diensten = value 
      FirePropertyChanged("Diensten") 
     End Set 
    End Property 

    Public Property SelectedDienst() As ToegangDienst 
     Get 
      Return _selectedDienst 
     End Get 
     Set(value As ToegangDienst) 
      If Diensten.Contains(value) Then 
       UpdateDienstToDetails(value) 
       _selectedDienst = value 
       FirePropertyChanged("SelectedDienst") 
       RefreshView() 
      End If 
     End Set 
    End Property 


    Private Sub RefreshView() 
     FirePropertyChanged("Diensten") 
     FirePropertyChanged("IsBusy") 
     FirePropertyChanged("IsVisible") 
     _ribbonViewModel.EvaluateCommands() 
    End Sub 

任何建議如何獲取其風格也更新?

現在奇怪的是,我設法解決這個問題沒有通過射擊屬性更改方法,但通過這行代碼:

Diensten = Diensten.AsEnumerable().ToList() 

我有一個有效的解決方案,但我更喜歡一些更清潔的方式爲了達成這個。

+0

如果我理解你IsActive屬性將不發射的風格吧?你在哪裏管理你的代碼中這個屬性的變化? – michele 2013-02-20 11:30:09

+0

我的列表框被綁定到:Diensten(List(Of Dienst))當這個列表使用propertychanged更新時,它被返回,但樣式不是 – JMan 2013-02-20 11:33:12

+0

@michele更新我的問題 – JMan 2013-02-20 11:46:29

回答

0

我的List(Of ToegangDienst)不需要被觀察,因爲我沒有添加或刪除任何東西,但顯然這也導致它在啓動PropertyChanged方法時不更新整個列表。

我改變了我的

List(Of ToegangDienst) 

ObservableCollection(Of ToegangDienst) 

它工作時,我叫

_selectedToegangDienst.FirePropertyChanged("IsActive")