DataBinding收集和更改集合的元素

时间:2015-05-16 07:38:36

标签: c# wpf xaml data-binding windows-8.1

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

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

这是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>

1 个答案:

答案 0 :(得分:3)

如果您希望更改ForegroundColor(这是猜测),您需要确保WPF组件知道它已更改。 ForegroundColor更改时,您还需要发送IsChecked的更改通知。

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