gpt4 book ai didi

c# - 更新绑定(bind) Observable 集合的一个元素

转载 作者:行者123 更新时间:2023-11-30 13:47:58 25 4
gpt4 key购买 nike

我有一个可观察的集合,里面有一个名为 songInfo 的自定义类。
它绑定(bind)到 ListView。这是绑定(bind)的代码:

C#:

var songData = new ObservableCollection<songInfo>();

public ObservableCollection<songInfo> _songData
{
get
{
return songData;
}
}

public class songInfo
{
public string Title { get; set; }
public string Artist { get; set; }
public string Album { get; set; }
public string Location { get; set; }
public string Ext { get; set; }
public bool isSongPlaying { get; set; }
}

XAML:

<Window x:Class="Genesis.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Genesis (Alpha)" Height="897" Width="882" Loaded="Window_Loaded"
DataContext="{Binding RelativeSource={RelativeSource Self}}" Name="Genesis">

<ListView Margin="12,39,0,0" Name="Library" DataContext="{Binding}" ItemsSource="{Binding _songData}" Height="681" VerticalAlignment="Top" MouseDoubleClick="Library_MouseDoubleClick" ContextMenu="{StaticResource MyContextMenu}" AlternationCount="2" Background="AliceBlue" HorizontalAlignment="Left" Width="846">
<ListView.View>
<GridView x:Name="gvLibrary">
<GridViewColumn Width="20" Header="hi" DisplayMemberBinding="{Binding isSongPlaying}" x:Name="gvColumnPlaying" />
<GridViewColumn Width="220" Header="Title" DisplayMemberBinding="{Binding Title}" x:Name="gvColumnTitle" />
<GridViewColumn Width="180" Header="Artist" DisplayMemberBinding="{Binding Artist}" x:Name="gvColumnArtist" />
<GridViewColumn Width="180" Header="Album" DisplayMemberBinding="{Binding Album}" x:Name="gvColumnAlbum" />
<GridViewColumn Width="180" Header="Location" DisplayMemberBinding="{Binding Location}" x:Name="gvColumnLocation" />
<GridViewColumn Width="80" Header="File Type" DisplayMemberBinding="{Binding Ext}" x:Name="gvColumnFileType" />
</GridView>
</ListView.View>
</ListView>

songInfo 在我的代码中的其他位置填充。添加或删除元素时,将更新 ListView。但是,有些时候我只是简单地更改 songInfo.ExtsongInfo.Location 等。我发现了一种复杂的方法来执行此操作并进行更新,但我不得不删除元素并重新添加它:

songInfo temp = songData[playing_song_index];
songData.RemoveAt(playing_song_index);
songData.Insert(playing_song_index, new songInfo()
{
Title = temp.Title,
Artist = temp.Artist,
Album = temp.Album,
Location = temp.Location,
Ext = temp.Ext,
isSongPlaying = true
});

这会将 isSongPlaying 更改为 true。

是否有更简单的方法来仅更新 GridView 的一个“列”?

最佳答案

您的songInfo 类需要实现INotifyPropertyChanged .

如果您正确实现此接口(interface),则对类成员的更改将通过绑定(bind)自动反射(reflect)在用户界面中。

关于c# - 更新绑定(bind) Observable 集合的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14532609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com