2014-03-19 52 views
0

我在我的C#應用​​程序中有一個datagrid。當應用程序被加載時,我看到datagrid沒有行是正確的,因爲沒有數據被加載。用戶然後可以點擊一個按鈕來加載一些數據。這些數據應該反映在數據網格中,但不是。發生的只有12個空行是可見的。這12個空行等於我期望看到的記錄數。Datagrid只返回空行

當我遍歷代碼時,我可以看到我的底層對象(PayOffWin)包含所有字段中的數據和列表中的12個項目。出於某種原因,這些數據並未反映在我的數據網格中,但我無法看到我做錯了什麼。

XAML

<DataGrid Name="dgPayoffWin" Grid.Row="1" Grid.Column="0" 
         Margin="20" 
         ItemsSource="{Binding Path=PayOffWin}" 
         Style="{StaticResource dgBase}" 
         CanUserAddRows="False" 
         CanUserDeleteRows="False"       
         AutoGenerateColumns="false"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="Range" Binding="{Binding Path=Group}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Frequency" Binding="{Binding Path=WinNum}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Total Value" Binding="{Binding Path=WinGain}" IsReadOnly="True" Width="*"/> 
        </DataGrid.Columns> 
       </DataGrid> 

代碼隱藏在我的視圖模型

List<ResultHolder.PayOffMatrix> _payOffWin; 

public List<ResultHolder.PayOffMatrix> PayOffWin 
    { 
     get { return _payOffWin; } 
     set 
     { 
      _payOffWin = value; 
      OnPropertyChanged("PayOffWin"); 
     } 
    } 


public class PayOffMatrix 
     { 
      public enumOutCome OutCome; 
      public string Group; 
      public double LimitUp, LimitDown; 
      public double WinNum, WinGain, LossNum, LossGain; 
      public double WinProb, WinExpect, LossProb, LossExpect; 
     } 

回答

1

你可以綁定到PUBLIC PROPERTIES,只需將PayOffMatrix中的字段更改爲公共屬性

1

變化:

List<ResultHolder.PayOffMatrix> PayOffWin; 

到:

ObservableCollection<ResultHolder.PayOffMatrix> PayOffWin; 

它會工作,列表不會通知視圖Automaticaly。

+0

謝謝@Alvaro。我認爲如果實現INotifyPropertyChanged接口這個問題也應該消失。我的其他數據網格正在工作,並且底層對象實現此接口。 – mHelpMe

+0

即使您將實現INotifyPropertyChanged,視圖也僅在第一次加載應用程序時從列表中更新。因此,您必須始終使用ObservableCollections,以確保在更新完成時完成通知。 – NTinkicht