Combobox selecteditem将在silverlight mvvm中的数据网格中绑定

时间:2012-10-18 07:11:52

标签: asp.net silverlight mvvm

我有一个疑问。 这个概念就是这样。 我用MVVM架构完成了一个Silverlight应用程序。 在那个设计页面中我有以下内容。 一个组合框和一个数据网格。 我使用observablecollection绑定datagrid,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。

1 个答案:

答案 0 :(得分:0)

Hai我找到了解决方案..

 2 things to be happened here..

1)我在Employees中获取了所有获取的数据结果。因此,如果我从组合框中选择任何值,我需要在数据网格中绑定选定的结果。为此,我们需要使用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 ..这就是全部.. 问题解决了..