0

文字列と ObservableCollection の 2 つのプロパティを含む TestData というオブジェクトがあります。コードで DataGrid に列を生成するために使用する ObservableCollection があります。TestData オブジェクトに基づいて DataGridTextColumn とそれぞれのヘッダーを動的に生成することに問題はありませんが、DataGridTextColumn Binding プロパティを TestData 内の ObservableCollection にバインドできません。

問題を言葉で述べたので、コードを提示してそれを明確にしましょう。

TestData.cs

public class TestData
{
    private ObservableCollection<string> data = new ObservableCollection<string>();
    public string Header { get; set; }
    public ObservableCollection<string> Data
    {
        get
        {
            return data;
        }

        set
        {
            data = value;
        }
    }
}

MainWindow.xaml.cs コード ビハインド

public partial class MainWindow : Window
{
    private ViewModel viewModel = new ViewModel();
    private List<string> headers = new List<string>();
    private ObservableCollection<TestData> mainData = new ObservableCollection<TestData>();        


    public MainWindow(ViewModel vm)
    {
        InitializeComponent();
        viewModel = vm;
        this.DataContext = viewModel;     


        mainData = viewModel.MainData;

        this.spreadSheet.ItemsSource = viewModel.MainData;            

        foreach (TestData data in mainData)      
        {
            if (headers.Contains(data.Header) == false)
            {
                headers.Add(data.Header);
                DataGridTextColumn col = new DataGridTextColumn();                    
                int x = viewModel.MainData.IndexOf(data);                    
                Binding bind = new Binding("Data");                    
                bind.BindsDirectlyToSource = true;                    
                bind.Source = mainData[x];                    
                col.Binding = bind;
                col.Header = data.Header;                                      
                this.spreadSheet.Columns.Add(col);        
            }

        }
    }
}

XAML MainWindow.xaml

<Grid>                
    <DataGrid   AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Stretch"  Name="spreadSheet" VerticalAlignment="Stretch"  Width="Auto" />

</Grid>

ObservableCollection に 4 つの TestData オブジェクトを配置すると、それらのヘッダーは正常に表示されますが、TestData オブジェクト内の ObservableCollection のすべてのデータは、DataGrid で (コレクション) として表示されます。

前もって感謝します!

4

1 に答える 1

0

私はあなたがこれを正しく見ているとは思わない。
単一の文字列を持つ個別のコレクションを各列にバインドしません。
行と列の単一の 2 次元コレクションを全体として DataGrid にバインドします。

列には ItemsSource プロパティがないことに注意してください。パス プロパティのみ。 DataGridTextColumn

DataGrid には ItemsSource プロパティがあります。 データグリッド

public class Myrow 
{
    public string Col1 { get; private set; }  
    public string Col2 { get; private set; } 
    public Myrow (string col1, string col2) { Col1 = col1, Col2 = Col2 }
}

ObservableCollection<Myrow> Myrows ...

MyRows は DataGrid (列ではない) にバインドされます

于 2012-09-25T16:56:16.853 に答える