修改绑定列表中的项目是修改原件还是副本?

时间:2012-08-03 12:09:23

标签: c# wpf xaml data-binding caliburn.micro

我对WPF(+ CaliburnMicro)listBox有一个奇怪的问题,如下所述

    <GroupBox Header="Configurations" Width="Auto" Grid.Row="1" Grid.Column="2">
        <ListBox ItemsSource="{Binding SelectableConfigurations}" BorderThickness="0" Width="Auto">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <CheckBox Content="{Binding Path=Name}" IsChecked="{Binding Path=IsSelected}" Margin="15,3" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ListBox>
    </GroupBox>

当我在列表中选择一个项目时,它会修改绑定列表中的项目,但不会在其他位置修改该项目。 IE下面的代码更新_selectableConfigurations列表中的项目,但不更新附加到_sc列表的原始对象。

似乎在修改属性时,原始对象在列表中被替换而不是简单地更新。是这样的吗?

    private readonly List<SelectableConfiguration> _selectableConfigurations;
    private ISelectableConfigurations _sc;

    public ConfigurationTabViewModel(
        ISelectableConfigurations configurations)
    {
        _sc = configurations;
        _selectableConfigurations = configurations.SelectableConfigurations.ToList();
    }

    public List<SelectableConfiguration> SelectableConfigurations
    {
        get { return _selectableConfigurations; }
    }

修改

 public class SelectableConfiguration
    {
        public bool IsSelected { get; set; }
        public string Name { get; set; }
        public IRunableOrmConfiguration Configuration { get; set; }
    }

1 个答案:

答案 0 :(得分:1)

你的项目可能被编辑得很好但是UI的其余部分并不知道它,因为该项目没有“说什么”。项目类中的Implement INotifyPropertyChanged