以下に定義されているように、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>
リスト内のアイテムを選択すると、バインドされたリスト内のアイテムが変更されますが、アイテムが参照されている他の場所では変更されないようです。つまり、以下のコードは _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; }
}