C# 如何将对子对象实例中属性的更改传达给视图?
我遇到数据绑定/视图刷新问题。当我的工作列表类的TotalTaskCount属性因未反映在我的视图中而更改时(视图仍在列中显示旧值) 我的数据结构与此类似: 包含datagrid的视图将其ItemSource属性绑定到视图模型中的属性,如下所示:C# 如何将对子对象实例中属性的更改传达给视图?,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,我遇到数据绑定/视图刷新问题。当我的工作列表类的TotalTaskCount属性因未反映在我的视图中而更改时(视图仍在列中显示旧值) 我的数据结构与此类似: 包含datagrid的视图将其ItemSource属性绑定到视图模型中的属性,如下所示: <DataContext="{Binding DashBoardVM, Source={StaticResource Locator}}"/> <DataGrid ItemsSource="{Binding Sele
<DataContext="{Binding DashBoardVM, Source={StaticResource Locator}}"/>
<DataGrid ItemsSource="{Binding SelectedTeamToManage.Worklists}"
AutoGenerateColumns = "true"/>
我只是不知道如何让viewmodel知道TeamWorkload observable集合中的更改并更新数据绑定。我在谷歌上搜索了关于嵌套属性、collectionchanged事件、冒泡属性更改事件的所有信息,但我看不到如何实现我在解决方案中找到的任何示例代码。我甚至不确定这是否是我的问题,但这是我最好的猜测。由于我对.NET、MVVM和C#都还比较陌生,因此任何提示都将非常感谢。声明
PropertyChanged
事件与实际实现INotifyPropertyChanged
接口不同
改变
public class Worklist
{
public event PropertyChangedEventHandler PropertyChanged;
...
}
到
为了避免此错误,您可以从公共基类派生所有视图模型类,如下所示:
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");
}
}
}
public class TeamWorkload
{
public string TeamName
{
get { return _teamName; }
set { _teamName = value; }
}
public ObservableCollection<Worklist> WorkLists
{
get { return _teamWorkLists; }
set
{
_teamWorkLists = value;
}
}
}
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));
}
}
}
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
声明
PropertyChanged
事件与实际实现INotifyPropertyChanged
接口不同
改变
public class Worklist
{
public event PropertyChangedEventHandler PropertyChanged;
...
}
到
为了避免此错误,您可以从公共基类派生所有视图模型类,如下所示:
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");
}
}
}
public class TeamWorkload
{
public string TeamName
{
get { return _teamName; }
set { _teamName = value; }
}
public ObservableCollection<Worklist> WorkLists
{
get { return _teamWorkLists; }
set
{
_teamWorkLists = value;
}
}
}
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));
}
}
}
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
你试过调查全球财产变化事件吗?谢谢Rahul-我没有。我会调查的!你试过调查全球财产变化事件吗?谢谢Rahul-我没有。我会调查的!克莱门斯,我真不敢相信我错过了!这就成功了。万分感谢!如果您有多个视图模型类,您可以创建一个实现INotifyPropertyChanged并具有受保护的NotifyPropertyChanged方法的公共基类。克莱门斯,我真不敢相信我错过了这个!这就成功了。万分感谢!如果有多个视图模型类,则可以创建实现INotifyPropertyChanged并具有受保护的NotifyPropertyChanged方法的公共基类。