0

mvvm を使用して Silverlight 5 で 1 つのプロジェクトを作成しています。1 つのページに 1 つのコンボボックスと 1 つのデータグリッドがあります。ここでの問題は、「コンボボックスで任意の値を選択しても、選択した行がデータグリッドに更新されないことを意味します。データグリッドで Fname、Sname、Dept の 3 つのフィールドをバインドし、すべての dept 値を
コンボボックスにバインドします。データグリッド構造はこれで、

____________________________
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 内の項目を選択すると、..! これをバインドするのを手伝ってください。事前にありがとう..

4

1 に答える 1

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");
          }

問題が解決しました.. :)

于 2012-10-25T07:51:02.577 に答える