数据绑定集合并更改集合的元素

本文关键字:集合 元素 合并 数据绑定 | 更新日期: 2023-09-27 17:49:31

我有一个集合和一个ListView,我已经绑定了一个对象集合:

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

这是一个关卡集合:

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

这里是一个Level类:

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});                             
    }

为什么?如何修复?

这是我的ItemTemplate:
                      <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的更改通知。

哦,不要用==比较双精度。