我创建了WPF ListBox
并设置了绑定到属性的itemcontainerstyle
并将其转换为有效颜色。
这在最初加载列表框时有效,因此绑定或转换器没有问题。
<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 :(得分:0)
我的List(Of ToegangDienst)
不需要是可观察的,因为我没有添加或删除任何内容,但显然这也导致它在触发PropertyChanged
方法时不更新整个List。 / p>
我改变了我的
List(Of ToegangDienst)
到
ObservableCollection(Of ToegangDienst)
当我打电话时它起作用了
_selectedToegangDienst.FirePropertyChanged("IsActive")