0

これは私のXAML コードです

    <DataGridTemplateColumn.CellEditingTemplate>
       <DataTemplate>
            <ComboBox Height="22" Name="MyCombobox"  
                      ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Page},Path=Data._cmbxData}" 
                      DisplayMemberPath="Column1" SelectedValuePath="Column2"></ComboBox>
       </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>

これが私のCSコードです

        DataTable _cmbxData = new DataTable();
        _cmbxData.Columns.Add("Column1", typeof(int));
        _cmbxData.Columns.Add("Column2", typeof(String));

        _cmbxData.Rows.Add(new object[] { 1,"Value1"});
        _cmbxData.Rows.Add(new object[] { 2, "Value2" });
        _cmbxData.Rows.Add(new object[] { 3, "Value3" });

この Datatable を Xaml の Combobox にバインドするにはどうすればよいですか。??

皆さん、ありがとうございました

4

2 に答える 2

0

変数_cmbxDataは、次のようにウィンドウのプロパティとして宣言する必要があります。

public DataTable CmbxData { get; set; }

次に、DataGridTemplateColumn がこのプロパティを参照する必要があります。RelativeSource を使用するか、ウィンドウに名前を付けてそのプロパティにアクセスできます。

<Window x:Class="SO1.UI.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    x:Name="mainPage">
<Grid>
    <DataGrid x:Name="dataGridTest">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Test">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="Test" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox Height="22" Name="MyCombobox"  
                          ItemsSource="{Binding ElementName=mainPage , Path=CmbxData}" 
                          DisplayMemberPath="Column1" SelectedValuePath="Column2">            </ComboBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

もちろん、データグリッドをソースにバインドする必要があります...たとえば、これはテストする私の分離コードです:

   public partial class MainWindow : Window
{
    public DataTable CmbxData { get; set; }
    public IList<string> Test { get; set; }
    public MainWindow()
    {
        InitializeComponent();

        CmbxData = new DataTable();
        CmbxData.Columns.Add("Column1", typeof(int));
        CmbxData.Columns.Add("Column2", typeof(String));

        CmbxData.Rows.Add(new object[] { 1, "Value1" });
        CmbxData.Rows.Add(new object[] { 2, "Value2" });
        CmbxData.Rows.Add(new object[] { 3, "Value3" });


        this.Test = new List<string>();
        this.Test.Add("Test 1");
        this.dataGridTest.ItemsSource = this.Test;

    }
}
于 2013-10-23T06:38:23.483 に答える
0

これはうまくいくはずです:

仮定して:

dt-データテーブル

myWindow - XAML ウィンドウ名

<Window
Name="myWindow"
...

Col_Name - 目的の列名

<ComboBox Name="MyComboBox" HorizontalAlignment="Left" Margin="181,55,0,0" Width="120" ItemsSource="{Binding Path=dt, ElementName=myWindow}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Label Content="{Binding Path=Col_Name}"/>
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>    
    </ComboBox>

または使用しますRelativeSource

于 2013-10-23T06:34:52.540 に答える