通过DataTemplate

时间:2018-11-08 15:08:20

标签: c# wpf listbox

我实现了可编辑的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来说还比较陌生,对如何调试它也没有想法。

1 个答案:

答案 0 :(得分:1)

  

可能是因为项目来源的类型为ObservableCollection<string>而不是ObservableCollection<ProperClassImplementation>(这是遗留原因)的原因。

是的。您无法修改string,因为它是不可变的。您需要绑定到类的string属性,这意味着您需要用ObservableCollection<string>替换ObservableCollection<ProperClassImplementation>

如果这是您希望的,恐怕绑定引擎不会用新的string来代替ObservableCollection<string>中的string