2012-10-23 68 views
0

我創造在Silverlight 5 MVVM一個項目更新數據網格。 我在一個頁面中有一個組合框和一個數據網格。這裏笏是問題的手段,「如果我在組合框中選擇任何值,它不選擇行更新到數據網格。 我綁定三個字段FNAME,SNAME,系在DataGrid中。和我所有的部門值綁定到
組合框。 DataGrid的結構是這樣的,組合框SelectionChanged事件沒有在Silverlight MVVM

____________________________ 
Fname | Sname | Dept | 
--------------------------- 
jeba | Raj  |Tester | 
--------------------------- 
Raj  | Kumar |Engineer| 
____________________________ 

組合框結構是這樣的,

Tester 
Engineer 

如果我選擇組合框中的SelectionChanged產品測試意味着記錄將被綁定到數據網格。

我寫了下面的代碼是,

XAML代碼是:

<my:DataGrid x:Name="McDataGrid" ItemsSource="{Binding Employees,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="130,151,0,0" Height="99" VerticalAlignment="Top" RowBackground="#AA5D9324" AutoGenerateColumns="True" HorizontalAlignment="Left" Width="194" CanUserResizeColumns="True" HorizontalScrollBarVisibility="Disabled"> 
     </my:DataGrid> 

<ComboBox ItemsSource="{Binding Employees}" DisplayMemberPath="Dept" SelectedItem="{Binding Names, Mode=TwoWay}" Margin="130,117,0,0" Height="26" VerticalAlignment="Top" HorizontalAlignment="Left" Width="120"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="SelectionChanged"> 
        <si:CallDataMethod Method="BindNew"/> 
        <si:SetProperty TargetName="LayoutRoot" PropertyName="Background" Value="PaleGoldenrod"/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 

     </ComboBox> 

ViewModel類文件代碼:

EmployeeListViewModel.cs

private Employee _Names; 
    public Employee Names 
    { 
     get 
     { 
      return _Names; 
     } 
     set 
     { 
      _Names = value; 
      RaisePropertyChanged("Names"); 
     } 
    } 
public void BindNew() 
     { 
      Employee emplo = new Employee(); 
      Employees = Silverlight_MVVM.DataHelper.EmployeeDataHelper.EmployeeData(); 
      var semp = from emp in Employees where emp.Dept.Equals(Names.Dept) select emp; 

      List<Employee> lt = new List<Employee>(); 
      lt = semp.ToList(); 
      lt.Count(); 
      int i; 
      Employees.Clear(); 
      for (i = 0; i < lt.Count(); i++) 
      { 
       emplo.Fname = lt[0].Fname.ToString(); 
       emplo.Sname = lt[0].Sname.ToString(); 
       emplo.Dept = lt[0].Dept.ToString(); 
       Employees.Add(emplo); 
      } 
      } 

這裏Employee.cs是一類立案型號: Employee.cs:

public class Employee: INotifyPropertyChanged 
    { 
     //Constructor Creation Begins 

     #region Constructor 
     public Employee(string Fname = "", string Sname = "", string Dept = "") 
     { 
      _Fname = Fname; 
      _Sname = Sname; 
      _Dept = Dept; 
     } 
     #endregion 


     #region Properties 
     private string _Fname = string.Empty; 
     public string Fname 
     { 
      get { return _Fname; } 
      set 
      { 
       _Fname = value; 
      } 
     } 
     private string _Sname = string.Empty; 
     public string Sname 
     { 
      get { return _Sname; } 

      set 
      { 
       _Sname = value; 
      } 
     } 
     private string _Dept = string.Empty; 
     public string Dept 
     { 
      get { return _Dept; } 
      set 
      { 
       _Dept = value; 
      } 
     } 
     #endregion 
#region INotifyPropertyChanged 
     // [field: NonSerialized] 
     public event PropertyChangedEventHandler PropertyChanged; 

     protected void RaisePropertyChanged(string propertyName) 
     { 
      var handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
     #endregion 

在DataHelper文件夾,我有以下,

public static class EmployeeDataHelper 
    { 
     public static ObservableCollection<Employee> EmployeeData() 
     { 

      ObservableCollection<Employee> sampleEmployee = new ObservableCollection<Employee>(); 
      sampleEmployee.Add(new Employee("jas", "manickaraj", "Engineer")); 
      sampleEmployee.Add(new Employee("raj", "Kumar", "Tester")); 
      sampleEmployee.Add(new Employee("Jeba", "raj", "Developer")); 
      return sampleEmployee; 
     } 
} 

這裏笏是問題意味着, 如果我選擇在選定的記錄不會綁定到DataGrid中的ComboBox中的任何項目..! 請幫我綁定這個。感謝ü提前..

回答

0

嗨,我找到了解決辦法剛纔。

我們需要告訴值改變爲從模型視圖的視圖。要做到這一點,只是給

RaisePropertyChanged( 「員工」);

**public void BindNew() 
     { 
      Employee emplo = new Employee(); 
      Employees = Silverlight_MVVM.DataHelper.EmployeeDataHelper.EmployeeData(); 
      var semp = from emp in Employees where emp.Dept.Equals(Names.Dept) select emp; 

      List<Employee> lt = new List<Employee>(); 
      lt = semp.ToList(); 
      lt.Count(); 
      int i; 
      Employees.Clear(); 
      for (i = 0; i < lt.Count(); i++) 
      { 
       emplo.Fname = lt[0].Fname.ToString(); 
       emplo.Sname = lt[0].Sname.ToString(); 
       emplo.Dept = lt[0].Dept.ToString(); 
       Employees.Add(emplo); 
      } 
RaisePropertyChanged("Employees"); 
      } 

問題解決了.. :)

相關問題