gpt4 book ai didi

c# - 如何将子对象实例中的属性更改传达给 View ?

转载 作者:行者123 更新时间:2023-12-03 11:03:31 25 4
gpt4 key购买 nike

我遇到了数据绑定(bind)/ View 刷新问题。当我的 Worklist 类的 TotalTask​​Count 属性发生更改时,因为它没有反射(reflect)在我的 View 中( View 仍然在列中显示旧值)。

我的数据结构类似于:

enter image description here

包含数据网格的 View 将其 ItemSource 属性绑定(bind)到 View 模型中的属性,如下所示:

    <DataContext="{Binding DashBoardVM, Source={StaticResource Locator}}"/>
<DataGrid ItemsSource="{Binding SelectedTeamToManage.Worklists}"
AutoGenerateColumns = "true"/>

View 模型是这样的:
    public class DashBoardViewModel
{
Observable Collection <Worklist> TeamWorklists = new ObservableCollection <Worklist>();

//Bound to ItemSource of the datagrid
public TeamWorkload SelectedTeamToManage
{
get { return _selectedTeamToManage; }
set
{
_selectedTeamToManage = value;
RaisePropertyChanged("SelectedTeamToManage");
}
}
}

TeamWorkload 类如下所示:
public class TeamWorkload
{
public string TeamName
{
get { return _teamName; }
set { _teamName = value; }
}

public ObservableCollection<Worklist> WorkLists
{
get { return _teamWorkLists; }
set
{
_teamWorkLists = value;
}
}
}

Worklist 类实现了 INotifyPropertyChanged,如下所示:
public Class Worklist
{
public event PropertyChangedEventHandler PropertyChanged;

[DisplayName("Total Tasks Count")]
public int TotalTasksCount
{
get { return _totalTasksCount; }
set
{
_totalTasksCount = value;
NotifyPropertyChanged("TotalTasksCount");
}
}

private void NotifyPropertyChanged(string info)
{
var propChanged = PropertyChanged;
if (propChanged != null)
{
propChanged(this, new PropertyChangedEventArgs(info));
}
}
}

我只是不知道如何让 View 模型了解 TeamWorkload 可观察集合中的更改并更新数据绑定(bind)。我已经用谷歌搜索了我能找到的关于嵌套属性、collectionchanged 事件、冒泡属性更改事件的所有内容,但我看不到如何实现我在解决方案中找到的任何示例代码。我什至不确定这是否是我的问题,但这是我最好的猜测。任何提示将不胜感激,因为我对 .NET、MVVM 和 C# 都还比较陌生。

最佳答案

声明 PropertyChanged事件与实际实现 INotifyPropertyChanged 不同。界面。

改变

public class Worklist
{
public event PropertyChangedEventHandler PropertyChanged;
...
}


public class Worklist : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
...
}

为了避免这个错误,你可以从一个通用的基类派生所有的 View 模型类,如下所示:
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

关于c# - 如何将子对象实例中的属性更改传达给 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42562158/

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