2012-12-31 56 views
0

我使用WPF工具包中的DataGrid - 最新的一個。但是,下面的代碼是不工作WPF DataGrid列綁定被自動生成的列覆蓋

XAML代碼

<dg:DataGrid 
    Grid.Row="1" 
    Name="eventLogGrid" 
    Margin="5,0,5,0" 
    BorderBrush="Black" 
    ItemsSource="{Binding EventLogs}" 
    SelectionMode="Single" 
    IsReadOnly="True"> 
    <dg:DataGrid.Columns> 
     <dg:DataGridTextColumn 
      Binding="{Binding EventID}" Header="Event ID" /> 
     <dg:DataGridTextColumn 
      Binding="{Binding Server}" Header="Server" /> 
     <dg:DataGridTextColumn 
      Binding="{Binding Source}" Header="Source" /> 
     <dg:DataGridTextColumn 
      Binding="{Binding Logged}" Header="Logged" /> 
    </dg:DataGrid.Columns> 

</dg:DataGrid> 

C#代碼

public class EventLogItem 
{ 
    public long EventID { get; set; } 
    public string Name { get; set; } 
    public string Message { get; set; } 
    public Server Server { get; set; } 
    public string Source { get; set; } 
    public EventLogEntryType Level { get; set; } 
    public DateTime Logged { get; set; } 
    public string Machine { get; set; } 
} 
public List<EventLogItem> EventLogs 
{ 
    get { return (List<EventLogItem>)GetValue(EventLogsProperty); } 
    set { SetValue(EventLogsProperty, value); 
} 

這裏真正的問題是,雖然我指定的列以及其在XAML代碼的結合,但是當數據到達後,每個屬性都佔據一列。所需的效果是隻顯示了所綁定的屬性。

+0

什麼是[綁定錯誤](http://www.zagstudio.com/blog/486) – Tilak

+0

綁定是不是被通知添加到集合中的新元素?如果您使用'ObservableCollection '而不是'List ',會發生什麼? – ceyko

+0

好吧,我會嘗試使用它。這裏的問題是,當我設置EventLogs屬性時,顯示的所有屬性而不是我綁定的那4列真的很令人沮喪。 – imgen

回答

2

DataGrid有一個屬性AutoGenerateColumns,它默認設置爲true,給你額外的列,你不期望。只需在DataGrid的xaml聲明中設置AutoGenerateColumns="False",您將只獲取指定的列。

(就個人而言,我總是發現超過這個便利的煩惱呢!)

1

或者您可以設置DataGridAutoGenerateColumns = true,定義了一個簡單Behavior<DataGrid>類來處理該事件AutoGeneratingColumn和使用System.ComponentModelDisplayName每個列的Bound屬性上的屬性可以指定自定義列標題(和/或其他列屬性)或禁止列(通過不具有屬性)。看到這個偉大而簡單的解決方案在這裏:A Smart Behavior for DataGrid.AutoGenerateColumns。順便說一句,我也只是注意到Xceed的DataGridControl自動(不必你定義一個Behavior<DataGridControl>類)使用DisplayName屬性(如果有)來覆蓋列標題。然而,如果屬性不存在,那麼它不會抑制列(我還沒有研究過它們是否支持以其他方式自動生成列抑制)。我通過處理視圖的Loaded事件並將列'Visible屬性設置爲false其中的Title是一些表示它應該被抑制的常數(即「_」)來半黑客入侵。