2

私の WPF アプリケーションには、ObservableCollection にバインドされた DataGrid があります。

    <DataGrid x:Name="DataGridTeilnehmer" HorizontalAlignment="Left" VerticalAlignment="Top" CellEditEnding="DataGridTeilnehmer_CellEditEnding" AutoGenerateColumns="False" SelectionMode="Single">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Teilnehmer" CellEditingTemplate="{StaticResource TeilnehmerEditTemplate}" CellTemplate="{StaticResource TeilnehmerCellTemplate}" />
            <DataGridComboBoxColumn Header="Pass" />
                    ...

DataGridComboBoxColumn には、各行の個別の値が入力されます。値は、最初の列のエントリによって異なります。したがって、次のように CellEditEnding イベントにデータを設定したいと思います。

    private void DataGridTeilnehmer_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        if (!commiting)
        {
          commiting = true;
            DataGridTeilnehmer.CommitEdit(DataGridEditingUnit.Row, false);
            commiting = false;

           // check, whether it is the first column that has been edited
           if (...)
             // get the list<string> for the combobox depending on the edited content
             // get the combobox of the current row and bind the calculated list<string> to it
        }
    }
}

これどうやってするの?

編集:私が達成しようとしているものの例。

それぞれ個別のチケットを持っている顧客のリストがあります。最初の列で顧客が選択されたら、この顧客が持っているチケット リストを読み込み、次の列 (コンボボックス列) に読み込みます。

前もってありがとう、
フランク

4

1 に答える 1

0

データグリッドを ObservableCollection にバインドし、オブジェクトが INotifyPropertyChanged を実装している場合、セル editending イベントを使用せずに必要なものを達成できます。

モデルでは、最初の列の値を確認してから、他の列の値を設定します。

private string _firstColumn;
public string FirstColumn
{
    get { return _firstColumn; }
    set { 
         _firstColumn = value; 
         if(value == ...)
         //set other properties
         ...
         //notify the change
         OnPropertyChanged("FirstColumn"); }
}

データグリッドがフォーカスを失うと、すべての新しい値がデータグリッドに通知されます

于 2012-11-22T14:58:17.467 に答える