0

我有一个疑问。这个概念是这样的。我用 MVVM 架构完成了一个 Silverlight 应用程序。在那个设计页面中,我有以下内容。一个组合框和一个数据网格。我使用 observablecollection 绑定数据网格,Employee 字段是 Fname、Sname、Dept。我在组合框中绑定部门。如果我选择任何部门,则需要根据部门值更改数据网格。但它没有更新。我使用 linq 查询来获取结果。它获取值。但它没有约束力。我的代码是,(在 ViewModel 中)

Employees = Silverlight_MVVM.DataHelper.EmployeeDataHelper.EmployeeData();

             var semp = from s in Employees where s.Dept.Equals(Names.Dept) select s;

如果你知道答案或方法请告诉。

我需要将 linq“semp”中的选定值分配给 View 中的 Datagrid。

4

1 回答 1

0

海我找到了解决方案..

 2 things to be happened here..

1)我在员工中有所有获取的数据结果。因此,如果我从组合框中选择了任何值,我需要将所选结果绑定到数据网格中。为此,我们需要使用Employees.Clear() 方法清除Employees。之后使用 Foreach 循环访问“semp”并返回值..

2) 现在Employees 只包含一个组合框选择值。所以Datagrid 和ComboBox 只显示一个值。如何克服.. 结果如下。

XAML:

<ComboBox ItemsSource="{Binding disemp}"  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"/>
                </i:EventTrigger>
                <i:EventTrigger EventName="Loaded">
                    <si:CallDataMethod Method="Selnew"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>

        </ComboBox>

视图模型:

public IList<Employee> Employees { get; private set; }
public ObservableCollection<Employee> disemp { get; private set; }
public ObservableCollection<Employee> dgrids { get; private set; }
public ObservableCollection<Employee> EmployeeCopy{ get; private set; }
public EmployeeListViewModel()
        {
            Employees = Silverlight_MVVM.DataHelper.EmployeeDataHelper.EmployeeData ();
            disemp = Silverlight_MVVM.DataHelper.EmployeeDataHelper.Employeedist();
            dgrids=Silverlight_MVVM.DataHelper.EmployeeDataHelper.dgrid();

        }
public void BindNew()
          {
                  Employee emplo = new Employee();
                  Employees = Silverlight_MVVM.DataHelper.EmployeeDataHelper.EmployeeData();
                  EmployeeCopy = dgrids.ToList ();
                  string name = Names.Dept.ToString();
                  var semp = from emp in EmployeeCopy where emp.Dept.Equals(name) select emp;
                  List<Employee> lt = new List<Employee>();
                  lt = semp.ToList();
                  lt.Count();
                  //int i;
                  Employees.Clear();
                  for (int 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");
              }
       }

我添加了虚拟 ObservableCollections.. 仅此而已.. 问题已解决..

于 2012-11-09T06:58:41.810 回答