string[] 和 List 的不同绑定行为

2024-04-13

我尝试理解(没有成功)为什么当源对象是时绑定行为不同string[] and List<string>。我有两个列表,它们唯一的区别是项目来源- 在一种情况下array在第二个List:

XAML 代码:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Button Content="Modify items" Click="Button_Click"/>
    <StackPanel Orientation="Horizontal">
        <StackPanel.Resources>
            <DataTemplate x:Key="ItemTemplate">
                <TextBlock Text="{Binding}" FontSize="16"/>
            </DataTemplate>
        </StackPanel.Resources>
        <ListView ItemsSource="{Binding ArrayElements}" ItemTemplate="{StaticResource ItemTemplate}" Width="100" Margin="20"/>
        <ListView ItemsSource="{Binding ListElements}" ItemTemplate="{StaticResource ItemTemplate}" Width="100" Margin="20"/>
    </StackPanel>
</StackPanel>

背后代码:

public sealed partial class MainPage : Page, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void RaiseProperty(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));

    public string[] ArrayElements { get; } = new string[] { "Standard", "Standard", "Standard" };
    public List<string> ListElements { get; } = new List<string> { "Standard", "Standard", "Standard" };

    public MainPage() { this.InitializeComponent(); this.DataContext = this; }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ArrayElements[1] = "Modified one";
        ListElements[1] = "Modified one";
        RaiseProperty(nameof(ArrayElements));
        RaiseProperty(nameof(ListElements));
    }
}

一旦我单击按钮,第一个列表(基于数组构建)就会重新填充新元素(看起来像新的项目来源),所以我可以看到一点闪烁和第二个元素的变化。

同时在第二个列表中没有任何变化 - 对绑定源的引用没有改变,所以我们在屏幕上看不到差异(属性变更没有任何影响,因为没有属性被改变) - 这是很清楚的。

那么为什么列表中项目来源设置为数组行为不同吗?

(虽然几乎整个代码都在上面)


这对我来说听起来很奇怪,但我从未遇到过这个问题,因为我在可观察集合中使用 ElementViewModel 对象。我不是更改列表项/数组元素,而是更改 ElementViewModel 的属性并在其中使用 INotifyProperty Change。这不是您问题的实际答案,但您可以解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

string[] 和 List 的不同绑定行为 的相关文章

随机推荐