0

1つ疑問があります。コンセプトはこうです。MVVM アーキテクチャを使用して Silverlight アプリケーションを 1 つ作成しました。そのデザインページには次のものがあります。1 つのコンボボックスと 1 つのデータグリッド。私はobservablecollectionを使用してデータグリッドをバインドし、従業員フィールドは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" で選択した値をビューの Datagrid に割り当てる必要があります。

4

1 に答える 1

0

ハイ私は解決策を見つけました..

 2 things to be happened here..

1) 取得したすべてのデータの結果が Employees にあります。したがって、コンボボックスから任意の値を選択した場合、選択した結果をデータグリッドにバインドする必要があります。そのためには、Employees.Clear() メソッドを使用して Employees をクリアする必要があります。その後、Foreachループを使用して「semp」にアクセスし、値を返します..

2) 従業員にはコンボボックスで選択された値が 1 つだけ含まれるようになりました。そのため、Datagrid と ComboBox には 1 つの値しか表示されません。それをどう乗り越えるか.. 結果は以下の通りです。

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 に答える