2011-08-08 13 views
0

ComboBoxはBindingListに文字列でバインドされています。それは正常に動作しています。ComboBoxはデータグリッドにバインドされていません

public BindingList<string> MyList 
{ 
    get 
    { 
     BindingList<string> list = new BindingList<string>(); 
     list.Add("one"); 
     list.Add("two"); 
     list.Add("three"); 

     return list; 
    } 
} 

XAML:I WPF 4データグリッドに入れて同じコード

<ComboBox x:Name="MyCmbBox" ItemsSource="{Binding Path=MyList}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

、これ以上働いていない(ただし、データグリッド外のコンボはまだ大丈夫実行されている):

<DataGrid AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox x:Name="MyCmbBox" ItemsSource="{Binding Path=MyList}"> 
         <ComboBox.ItemTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding}" /> 
          </DataTemplate> 
         </ComboBox.ItemTemplate> 
        </ComboBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

なぜですか?あなたは

答えて

1

DataGridの場合にComboBoxを持っているので感謝異なるDataContextからMyList性質を持っていないグリッド行のデータ項目、。この問題を解決するには

、あなたはグリッドのDataContextにバインドするバインディングRelativeSourceを使用することができます。

<DataGrid AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox x:Name="MyCmbBox" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.MyList}"> 
         <ComboBox.ItemTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding}" /> 
          </DataTemplate> 
         </ComboBox.ItemTemplate> 
        </ComboBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+1

ありがとうございました。さて、4時間のグーグルで7分後に答えました。 –

+0

@ o..o - ありがとうございます。将来、このようなエラーをキャッチするには、アプリケーションをデバッガで実行し、Visual Studioの出力ウィンドウを調べます。そこにバインディングエラーが表示されます。 –

関連する問題