Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将对子对象实例中属性的更改传达给视图?_C#_Wpf_Mvvm_Data Binding - Fatal编程技术网

C# 如何将对子对象实例中属性的更改传达给视图?

C# 如何将对子对象实例中属性的更改传达给视图?,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,我遇到数据绑定/视图刷新问题。当我的工作列表类的TotalTaskCount属性因未反映在我的视图中而更改时(视图仍在列中显示旧值) 我的数据结构与此类似: 包含datagrid的视图将其ItemSource属性绑定到视图模型中的属性,如下所示: <DataContext="{Binding DashBoardVM, Source={StaticResource Locator}}"/> <DataGrid ItemsSource="{Binding Sele

我遇到数据绑定/视图刷新问题。当我的工作列表类的TotalTaskCount属性因未反映在我的视图中而更改时(视图仍在列中显示旧值)

我的数据结构与此类似:

包含datagrid的视图将其ItemSource属性绑定到视图模型中的属性,如下所示:

    <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方法的公共基类。