2016-09-09 6 views
0

他のテーブルへの外部キーを含むDataGridに一連の行をロードしようとしています。この特定のケースでは、行には、適切に表示して変更を許可するComboBox(ItemsSourceはDataViewタイプのトランザクションテーブルです)を使用したいTransactionTypeID(TransactionTypesテーブルへの外部キー)があります。ComboBoxを使用して外部キーを持つDataGrid行をロードする

<DataGridTemplateColumn Header="Transaction Types"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="Need ComboBox SelectedText here!"></TextBlock> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox ItemsSource="{Binding DataContext.TransactionTypes, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
       DisplayMemberPath="Description" 
       SelectedValuePath="ID" 
       SelectedItem="{Binding TransactionTypeID}"></ComboBox> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

ComboBox SelectedItemは機能していないように見えますが、TextBlockテキストを取り込む方法についてはわかりません。

+0

は、あなたはそれが動作していないようですコンボボックスのSelectedItemに約あるかを説明することはできますか? –

+0

@EdPlunkett ComboBoxには選択肢がありません。 – AnthonyOSX

+0

リストから項目を選択すると、コンボボックスは空白のままですか? –

答えて

0

私は、列の値を設定し、ドロップダウンの特定の選択に基づいてトランザクションタイプの説明を表示することを念頭に置いています。この例は、編集テンプレートのドロップダウンから値を選択した後に、テキストブロック内のテキストをバインドすることを示しています。

XAML:

<Grid DataContext="{x:Static local:dc.Instance}"> 
    <Grid.Resources> 
     <DataTemplate x:Key="DisplayTemplate" > 
      <TextBlock Text="{Binding TransactionType.Description}"></TextBlock> 
     </DataTemplate> 
     <DataTemplate x:Key="EditTemplate"> 
      <ComboBox ItemsSource="{x:Static local:dc.TransactionTypes}" 
       DisplayMemberPath="Description" 
       SelectedItem="{Binding TransactionType}"> 
      </ComboBox> 
     </DataTemplate> 
    </Grid.Resources> 
    <DataGrid Name="DG1" ItemsSource="{Binding Path=DGItems}" AutoGenerateColumns="False" > 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Transaction Type" 
            CellTemplate="{StaticResource DisplayTemplate}" 
            CellEditingTemplate="{StaticResource EditTemplate}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

データコンテキストクラス:

public class dc 
{ 
    private static readonly dc _dc = new dc(); 
    public static dc Instance { get { return _dc; } } 


    public class TransactionTypeItem 
    { 
     public int ID { get; set; } 
     public string Description { get; set; } 
    } 

    public static List<TransactionTypeItem> TransactionTypes 
    { 
     get 
     { 
      return new List<TransactionTypeItem>() { new TransactionTypeItem() { ID = 0, Description = "Zero" }, 
                new TransactionTypeItem() { ID = 1, Description = "One" }, 
                new TransactionTypeItem() { ID = 2, Description = "Two" } }; 
     } 
    } 

    public class DataItem 
    { 
     public TransactionTypeItem TransactionType { get; set; } 
     public string OtherData { get; set; } 
    } 


    private List<DataItem> _items; 

    public List<DataItem> DGItems 
    { 
     get 
     { 
      return _items; 
     } 
    } 




    private dc() 
    { 
     _items = new List<DataItem>() 
     { 
      new DataItem() { OtherData = "Test0", TransactionType = TransactionTypes[0] }, 
      new DataItem() { OtherData = "Test1", TransactionType = TransactionTypes[1] }, 
      new DataItem() { OtherData = "Test2", TransactionType = TransactionTypes[2] }, 
     }; 
    } 

} 
+0

ここで問題となるのは、DataGridのItemsSourceとしてDataViewを使用したいということだけです。 – AnthonyOSX

+0

これは、簡単に行うには、ItemSourceパスを実際のDataViewを指すように変更します。 – leetibbett

関連する問題