DataBinding 集合和改变集合元素

DataBinding Collection and change element of collection

我有一个集合和一个已将对象集合绑定到的 ListView:

<ListView ItemsSource="{Binding Levels}"... />

这是关卡集合:

private ObservableCollection<Level> _levels;
public ObservableCollection<Level> Levels
{
    get { return _levels; }
    set { SetProperty(ref _levels, value); }
}

这里是关卡 class:

public class Level : BindableBase
{
    private double _value;
    public double Value
    {
        get { return _value; }
        set { SetProperty(ref _value, value); }
    }

    private bool _isChecked;
    public bool IsChecked
    {
        get {  return _isChecked; }
        set { SetProperty(ref _isChecked, value); }
    }

    public SolidColorBrush ForegroundColor
    {
        get { return IsChecked ? new SolidColorBrush(Colors.Yellow) : new SolidColorBrush(Colors.BlueViolet); }
    }
}

如果我在集合中添加元素,新元素将显示在 ListView 中,但是如果我更改集合中现有的元素,我看不到任何变化:

private void LvLevels_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (LvLevels.SelectedItem != null)
    {
        selectedLevel = (Level)LvLevels.SelectedItem;                                      
        foreach (var l in viewModel.Levels)
        {                   
           if (l.Value == selectedLevel.Value)                    
              l.IsChecked = true;  // it doesn't work                                                          
           else
              l.IsChecked = false; 
        }   

        // it works
        // viewModel.Levels.Add(new Level { Value = 10, IsChecked = true});                             
    }

为什么以及如何解决?

更新

这是我的项目模板:

                      <ListView.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>

                                <Image Grid.Column="0" 
                                   Source="../Assets/icons/зоны.png"
                                   Margin="10 0 0 0"/>
                                <TextBlock x:Name="tblock" Text="{Binding Value}" Grid.Column="1" FontSize="30"
                                          Foreground="{Binding ForegroundColor}" />
                                <!--  Style="{StaticResource ZoneButtonText}" -->
                            </Grid>

                        </DataTemplate>
                    </ListView.ItemTemplate>

如果您希望 ForegroundColor 发生变化(这是一个猜测),您需要确保 WPF 组件 知道 它已经发生变化。当 IsChecked 发生变化时,您也需要发送 ForegroundColor 的变化通知。

哦,不要使用 == 比较双打。双打是 floating point 个变量。