1

ComboBoxColumnを使用して、データテーブルにバインドされたデータグリッドがあります。この列のXAMLは次のとおりです。

<DataGridComboBoxColumn Header="Rep Name" SortMemberPath="RepName" 
                      ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged, Source={StaticResource EmployeeList}, Path=Employees}"
                      SelectedValueBinding="{Binding Mode=TwoWay, Path=EmpId}"
                      SelectedValuePath="EmpId" DisplayMemberPath="RepName" />


私の従業員クラス:

public class EmployeeList : INotifyPropertyChanged
    {
        private ObservableCollection<Employee> _employees = new ObservableCollection<Employee>();

        public EmployeeList()
        {
           ...
        }

        public ObservableCollection<Employee> Employees
        {
            get { return _employees; }
            set { _employees = value; NotifyPropertyChanged("Employees"); }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

    public class Employee : INotifyPropertyChanged
    {
        private int _id;
        public int EmpId
        {
            get { return _id; }
            set { _id = value; OnPropertyChanged("EmpId"); }
        }

        public string RepName { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this,
                    new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }


グリッドのアイテムソースとして機能するDataTableには、「EmpId」列と「RepName」列が含まれています。コンボボックスにはすべての従業員が入力されており、選択すると、データテーブルに反映されます。ただし、画面が読み込まれると、現在割り当てられている従業員はデフォルトでコンボボックスで選択されません。コンボボックスのSelectedValueBindingプロパティがこれを処理すると思いました...何が間違っているのですか?


明確化のため
の更新:データグリッドは、EmployeeID列を含むデータテーブルにバインドされています。画面が読み込まれるときに、テーブルにEmployeeID 1、2、3の3つの行があると仮定します。最初の行のコンボボックス列でEmployeeID 1を選択し、2番目の行でEmployeeID2を選択する必要があります。 EmployeeID3が選択されている3行目。

4

1 に答える 1

0

あなたの問題を正しく理解していればComboBox、コレクションの最初のアイテムがデフォルトで選択されていませんか?

その場合は、 のプロパティを trueIsSychronizedWithCurrentItemに設定する必要があります。ここComboBoxについての情報。Selector.IsSynchronizedWithCurrentItem

...

残念ながら、さらに調査すると、プロパティDataGridComboBoxColumnはありません。:/ しかし、次のようなIsSynchronizedWithCurrentItemを作成できます。DataGridTemplateColunm

<DataGridTemplateColumn Header="Rep Name">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Employees}" 
                   IsSynchronizedWithCurrentItem="true" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColunm>

それが役立つことを願っています!

于 2011-05-11T17:31:39.320 に答える