我实现了可编辑的ListBox
项,就像在此答案Inline editing TextBlock in a ListBox with Data Template (WPF)
中发布的一样。
但是新值不会在我的ListBox的ItemsSource
对象中得到更新。
这是XAML:
<ListBox Grid.Row="2" Name="ds_ConfigProfiles" ItemsSource="{Binding ConfigProfiles}" SelectedItem="{Binding ActiveConfigProfile}" IsSynchronizedWithCurrentItem="True" Panel.ZIndex="-1">
<ListBox.ItemTemplate>
<DataTemplate>
<!-- TODO: this is meant for allowing edit of the profile names, but the new name does not get stored back to ConfigProfiles -->
<local:TextToggleEdit Text="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MinWidth="40" Height="23" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是视图模型中的ConfigProfiles
属性:
/// <summary>Configuration profiles that were found in the active storage path</summary>
public ObservableCollection<string> ConfigProfiles { get; private set; } = new ObservableCollection<string>();
我了解不对吗?
可能是因为项目来源的类型为ObservableCollection<string>
而不是ObservableCollection<ProperClassImplementation>
(这是遗留原因)的原因。
我对WPF来说还比较陌生,对如何调试它也没有想法。
答案 0 :(得分:1)
可能是因为项目来源的类型为
ObservableCollection<string>
而不是ObservableCollection<ProperClassImplementation>
(这是遗留原因)的原因。
是的。您无法修改string
,因为它是不可变的。您需要绑定到类的string
属性,这意味着您需要用ObservableCollection<string>
替换ObservableCollection<ProperClassImplementation>
。
如果这是您希望的,恐怕绑定引擎不会用新的string
来代替ObservableCollection<string>
中的string
。