2011-11-10 17 views

答えて

0

あなたのセルの値は、指定された列がバインドされているものに依存することになります。 がモデルのインスタンスになります。

DataGridにバインドしているPersonクラスのコレクションがあるとします。

Person p = ((ContentPresenter)myDatGrid.Columns[0].GetCellContent(myDatGrid.Items[0])).Content; 

Contentプロパティはのための基礎となるモデルを返すために起こっています。特定のプロパティを取得したい場合は、INotifyPropertyChangedを実装する必要があるunderylingオブジェクトに直接アクセスすることで、WinFormsアプリケーションと同様にDataGridを欺く必要はありません。

((ComboBox)(myDatGrid.Columns[0].GetCellContent(
(TestData)myDatGrid.Items[0]))).SelectedValue.ToString()); 

今では動作します:

+0

列cuzを私は使用してM Iは本当にそれをapreciateあなたの助けのためのThxをアーロン、実際に私は私が入れなければならないいくつかのキャストを逃したと思いますが、私は実際にこれやったはずですDataGridComboBoxColumn です: ((コンボボックス)を( MyDatGrid.Items [0]))。)。SelectedValue.ToString()); MyDatGrid.Columns [0] .GetCellContent( (TestData)myDatGrid.Items [0])))。 今すぐ動作します –

0

はOK、私はそれを得たと思う、私は私が使用している列がDataGridComboBoxColumn

あるので、私はこれを行う実際にする必要があり、私は入れなければならないいくつかのキャストを逃しました。

0

私は上に提案されたことを試してみましたが、うまくいきませんでした。

ComboBoxをバインドして最初に読み込んだときにWPF Datagridで正しい値を選択しようと1日苦労していましたので、ここで私の解決策を共有すると思いました。 VBについては申し訳ありませんが、コンセプトはC#でも動作するはずです。

最初にグリッドが読み込まれたときに値が入力されて選択されるようにする場合は、コードを正しいイベントハンドラに配置する必要があります。LayoutUpdated。他のイベントハンドラでは、GetCellContent関数はNothing(null)を返します。このコードは、Button.Clickイベントなど、後で発生するイベントを処理するイベントハンドラに配置することもできます(必要条件を満たす場合)。

第二に、コード:

 For i As Int32 = 0 To DataGrid1.Items.Count - 1 
     Dim row As DataGridRow 
     row = DataGrid1.ItemContainerGenerator.ContainerFromItem(DataGrid1.Items(i)) 
     If row IsNot Nothing AndAlso row.Item IsNot Nothing Then 
      Dim cp As ContentPresenter = DataGrid1.Columns(3).GetCellContent(DataGrid1.Items(i)) 
      If cp IsNot Nothing AndAlso cp.ContentTemplate IsNot Nothing Then 
       Dim dt As DataTemplate = cp.ContentTemplate 
       If dt IsNot Nothing Then 
        Dim cb As ComboBox = dt.FindName("cbVendorNames", cp) 
        If cb IsNot Nothing Then 
         cb.ItemsSource = Vendors 
         cb.DisplayMemberPath = "VendorName" 
         cb.SelectedValuePath = "AS_ID" 

         cb.SelectedValue = "" ' set your selected value here 


        End If 
       End If 
      End If 
     End If 
    Next 

このコードは、データグリッド内のすべての行から(a)のループ、(b)はこの場合は、選択したセルのためのContentPresenterを(取得である何、セル3)、(c)ContentPresenterのDataTemplateを取得し、(d)最後にComboBoxへの参照を取得します。これにより、ComboBoxを外部データソース(List(Of Vendor))にバインドし、値を選択することができました。誰かがより良い解決策を持っています。投稿してください。

関連する問題