0

以下に定義されているように、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; }
    }
4

1 に答える 1

1

アイテムはおそらく問題なく編集されますが、アイテムは「何も言わない」ため、UI の残りの部分はそれについて知りません。item クラスで実装します。 INotifyPropertyChanged

于 2012-08-03T12:18:23.753 に答える