gpt4 book ai didi

c# - UI 不像 ObservableCollection

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:23 25 4
gpt4 key购买 nike

我正在尝试让 ListView 更改为我在 ObvservableCollection 中修改的任何值。

我目前正在使用它并将集合绑定(bind)到我的 ListView

private ObservableCollection<Task> _tasks = TaskInit.TaskCollection;
/// <summary>
/// Observable Collection to hold all tasks
/// </summary>
///

public ObservableCollection<Task> TasksCollection
{
get { return _tasks; }
set
{
_tasks = value;
NotifyPropertyChanged("TasksCollection");
}
}

问题是如果我使用下面的代码:

TaskInit.TasksCollection[2].TaskNumber = "hi";

该值仍将与之前的值相同,即使它应该已经改变。

谁能指出我可能造成的问题?

xaml 的第一行是:

<ListView SelectionMode="Single" ScrollViewer.CanContentScroll="True" x:Name="listTasks" Margin="0,0,0,35" Background="{x:Null}" BorderBrush="{x:Null}" ItemsSource="{Binding TasksCollection, Mode=TwoWay}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" FontFamily="Myriad Pro" Foreground="{x:Null}" IsSynchronizedWithCurrentItem="True">

任务类:

public class Task : INotifyPropertyChanged
{
/// <summary>
///
/// </summary>
public string Module { get; set; }
/// <summary>
///
/// </summary>
public string FirstValue { get; set; }
/// <summary>
///
/// </summary>
public string SecondValue { get; set; }
/// <summary>
///
/// </summary>
public string ThirdValue { get; set; }
/// <summary>
///
/// </summary>
public int Minutes { get; set; }

/// <summary>
///
/// </summary>
public string TaskNumber { get; set; }

/// <summary>
///
/// </summary>
public string Story1 { get; set; }

/// <summary>
///
/// </summary>
public string Story2 { get; set; }

/// <summary>
///
/// </summary>
public string Story3 { get; set; }

/// <summary>
///
/// </summary>
public string NetworkAdapter { get; set; }

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}

最佳答案

ObservableCollection 将处理在集合中添加或删除项的情况,但它不会处理集合中项的属性发生更改的情况。 As per MSDN: 表示一个动态数据集合,在添加、删除项目或刷新整个列表时提供通知。

您需要确保您的 Task 类实现了 INotifyPropertyChanged 接口(interface),并在其 TaskNumber 属性更改时触发 PropertyChanged 事件:

 private string _taskNumber;
public string TaskNumber
{
get { return _taskNumber; }
set
{
if(_taskNumber!= value)
{
_taskNumber= value;
OnPropertyChanged("TaskNumber");
}
}
}

您的 Task 类实现了 INotifyPropertyChanged,但它从未在其属性值更改时实际触发 PropertyChanged 事件。当您的每个属性发生变化时,您需要手动调用 OnPropertyChanged - 它不会自动发生。

关于c# - UI 不像 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892585/

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