WPF ListBox样式更新不起作用

时间:2013-02-20 10:43:53

标签: wpf data-binding listbox styles

我创建了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()

我有一个可行的解决方案,但我更喜欢一些更清洁的方法来实现这一目标。

1 个答案:

答案 0 :(得分:0)

我的List(Of ToegangDienst)不需要是可观察的,因为我没有添加或删除任何内容,但显然这也导致它在触发PropertyChanged方法时不更新整个List。 / p>

我改变了我的

List(Of ToegangDienst)

ObservableCollection(Of ToegangDienst)

当我打电话时它起作用了

_selectedToegangDienst.FirePropertyChanged("IsActive")