0

を作成し、プロパティにバインドして有効な色に変換する をWPF ListBox設定しました。 これは、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()

私は実用的な解決策を持っていますが、これを達成するためのよりクリーンな方法を好むでしょう。

4

1 に答える 1

0

List(Of ToegangDienst)は何かを追加したり削除したりしていなかったので、監視可能である必要はありませんでしたが、明らかにこれにより、PropertyChangedメソッドを起動するときにリスト全体が更新されませんでした。

私は自分を変えました

List(Of ToegangDienst)

ObservableCollection(Of ToegangDienst)

そして、私が電話したとき、それはうまくいきました

_selectedToegangDienst.FirePropertyChanged("IsActive")
于 2013-02-20T11:59:57.430 に答える