我有一个疑问。 这个概念就是这样。 我用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。
答案 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 ..这就是全部.. 问题解决了..