2016-08-24 79 views
1

我想結合A級列表時:空的DataGrid綁定列表

class ClassA 
{ 
    public int Number; 
    public int[,] AnArray; 
} 

要我的DataGrid:

<DataGrid Name="ResultsDataGrid" DataContext="{Binding ResultsForGrid}" ItemsSource="{Binding Path=ResultsForGrid}" AutoGenerateColumns="False" Margin="0,10,176,0" Height="220.378" VerticalAlignment="Top" > 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Number" Binding="{Binding Path=Number}"/> 
     <DataGridTextColumn Header="Array Rows" Binding="{Binding Path=AnArray.GetLength(0)}"/> 
     <DataGridTextColumn Header="Array Columns" Binding="{Binding Path=AnArray.GetLength(1)}"/> 
    </DataGrid.Columns> 
</DataGrid> 

要綁定它我使用的是List<ClassA> ResultsForGrid;包含所有我想要在視圖中顯示的元素,並在我的窗口類中聲明爲全局變量。當我的名單充滿了ClassA的所有元素我需要顯示我設置的ItemsSource像

ResultsDataGrid.ItemsSource = ResultsForGrid; 

奇怪的是,當我運行的代碼,我得到一個DataGrid正確的標題和行的正確數目(ResultsForGrid中的元素數),但是完全爲空。

我試過很多Bindings和DataContext的組合,因爲這個視圖似乎很容易在網上得到問題,但都無濟於事。

+1

您的綁定存在多個問題。 MSDN綁定聲明文章應該可以幫助您解決它們:https://msdn.microsoft.com/en-us/library/ms752300(v=vs.100).aspx#Path_Syntax – ASh

+0

請不要在DataGrid上設置DataContext或更改DataGrid的綁定就像這樣ItemsSource =「{Binding}」..可能是這樣會解決你的問題.. –

+0

你有沒有試過改變成鋸齒狀的數組 – Neil

回答

3

class ClassA 
{ 
    public int Number; 
    public int[,] AnArray; 
} 

應該實現INotifyPropertyChanged和領域應該由性能進行更換:

private _number; 
public int Number 
{ 
    get { return _number; } 
    set 
    { 
     _number= value; 
     OnPropertyChanged(); 
    } 
} 

在XAML不能使用方法:

<DataGridTextColumn Header="Array Rows" Binding="{Binding Path=AnArray.GetLength(0)}"/> 

創建一個包裝屬性此AnArray.GetLength(0)並綁定到該屬性。

您還需要包裝類List<ClassA>,並且該類的實例應爲實例的DataContext

+1

好吧,我現在可以在我的網格中獲得一些文本。我所做的只是改變這個類來包含屬性。我沒有添加'INotifyPropertyChanged',因爲我想讓網格保持不變。我不需要包裹我的名單或其他任何東西。 – mjgalindo

+0

您需要實現INotifyPropertyChanged以通過數據網格從版本更新您的類實例。 不要忘記在你的xaml中添加UpdateSourceTrigger = PropertyChanged。 –

+0

我不想編輯任何內容,只顯示它 – mjgalindo