2014-04-15 38 views
0

我是WPF新手我已经实现了INotifyPropertyChanged接口。我有一个包含属性“TeamMemberList”的viewmodel。该控件执行setter部件,更改属性值,但PropertyChanged事件保持为空。 这里是代码:viewmodel属性的变化没有反映在UI中

ViewModelBase:

public class ViewModelBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged;   
    protected void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    }   
} 

视图模型:(其继承了viewmodelbase) 物业是

public List<Employee> TeamMemberList 
    { 
     get 
     { 
      return _teamMemberList; 
     } 
     set 
     { 
      _teamMemberList = value; 
      NotifyPropertyChanged("TeamMemberList"); 
     } 
    } 

绑定

<ListBox Margin="10" ItemsSource="{Binding TeamMemberList, Mode=TwoWay, 
            UpdateSourceTrigger=PropertyChanged}" > 

当新员工加入到DB,型号读取它&为所有emplyee创建列表,然后TeamMeberList属性得到更新。这是TeamMemberList

var qryEmp = from employee in ClientModel.EmployeeList 
         where employee.ReportingManager == UserProfile.EmployeeId 
         select new Employee 
         { 
          EmployeeId = employee.EmployeeId, 
          EmployeeName = employee.EmployeeName, 
          Designation = employee.Designation, 
          ProfilePic = employee.ProfilePic, 
         }; 
      TeamMemberList = qryEmp.ToList(); 

更新用的方法和实施员工

public class Employee : ViewModelBase 
{ 

    private string _employeeName; 
    private string _employeeId; 
    private string _profilePic; 
    private string _designation; 
    private string _reportinManager; 

    public string EmployeeName 
    { 
     get 
     { 
      return _employeeName; 
     } 
     set 
     { 

      _employeeName = value; 
      NotifyPropertyChanged("EmployeeName"); 
     } 

    } 


    public string EmployeeId 
    { 
     get 
     { 
      return _employeeId; 
     } 
     set 
     { 
      _employeeId = value; 
      NotifyPropertyChanged("EmployeeId"); 
     } 
    } 


    public string ProfilePic 
    { 
     get 
     { 
      return _profilePic; 
     } 
     set 
     { 
      _profilePic = value; 
      NotifyPropertyChanged("ProfilePic"); 
     } 
    } 


    public string Designation 
    { 
     get 
     { 
      return _designation; 
     } 
     set 
     { 
      _designation = value; 
      NotifyPropertyChanged("Designation"); 
     } 
    } 
    public string ReportingManager 
    { 
     get 
     { 
      return _reportinManager; 
     } 
     set 
     { 
      _reportinManager = value; 
      NotifyPropertyChanged("ReportingManager"); 
     } 
    } 
} 
+1

这将是空..它不是一个问题用于更新绑定..显示您正在更新的代码以及Model(Employee Class)的实现。 – Sankarann

+0

@Sankarann - '这将是空的,除非你指派一个代表' - 这是不正确的。这是什么意思? –

+0

@ user3217737 - 你是否将Viewmodel设置为DataContext到你的视图? –

回答

0

使用ObserveableCollection的,而不是一个列表

+0

虽然列表不允许与一个ObservableCollection,它仍然可以工作,所以我不认为这是解决方案 – AlexC

1

很难说的问题是什么时,我们没有看到更多的代码(例如:你如何设置DataContext等)。

但有一个简单的方法通过将以下属性来进行调试你的绑定:

<ListBox Margin="10" ItemsSource="{Binding TeamMemberList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     PresentationTraceSources.TraceLevel=High> 

添加此属性将输出整个结合序列到Visual Studio的输出窗口。这应该指出发生了什么问题。

如果要启用此为所有绑定,也可以使用Visual Studio的选项:除非你指定一个代表到

Visual Studio Options dialog to enable WPF Tracing

相关问题