2013-02-12 96 views
0

我有一個ObservableCollection<SolarSystemViewModel>,其中SolarSystemViewModel來自ViewModelBase。當我綁定到我的ObservableCollection時,ViewModelBase公開了IsInDesignModeIsInDesignModeStatic,這些數據網格出現在數據網格中。如何在默認情況下隱藏datagrid中的這些列,而無需使用Blend生成XAML,然後手動禁用這些列?從WPF中的數據綁定數據網格中排除列

謝謝。

例子: enter image description here

+2

假設您使用'AutoGenerateColumns = True',則不能使用默認數據網格。您需要在視圖中創建所需的特定列。 – 2013-02-12 21:30:46

+1

也許[這有助於](http://stackoverflow.com/q/4000132/620360)。 – LPL 2013-02-12 21:36:17

+0

@MetroSmurf我沒有自動生成列,但我意識到我的問題非常愚蠢。謝謝 – forTruce 2013-02-12 21:39:37

回答

0

請嘗試手動定義列..沿着線的東西。

<dg:DataGrid x:Name="myDataGrid" ItemsSource="{Binding Path = SolarSystemViewModels}" AutoGenerateColumns="False"> 
    <dg:DataGrid.Columns> 
    <dg:DataGridTextColumn Binding="{Binding FactionKills}" Header="Faction Kills" /> 
    <dg:DataGridTextColumn Binding="{Binding Jumps}" Header="Jumps" /> 
    <dg:DataGridTextColumn Binding="{Binding PodKills}" Header="Pod Kills" /> 
    <dg:DataGridTextColumn Binding="{Binding ShipKills}" Header="Ship Kills" /> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 

你不必使用混合爲此,只需使用XAML VS編輯

9

我一直在尋找的答案,這個問題了。 這裏是一個相當不錯的解決方案:

綁定屬性 「OnAutoGeneratingColumn」 你的DataGrid的是這樣的(注意XAML是不是100%完成):

<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" /> 

而在你的代碼隱藏:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    PropertyDescriptor propertyDescriptor = (PropertyDescriptor)e.PropertyDescriptor; 
    e.Column.Header = propertyDescriptor.DisplayName; 
    if (propertyDescriptor.DisplayName == "IsInDesignMode") 
    { 
     e.Cancel = true; 
    } 
} 

「e.Cancel = true;」將阻止生成當前列。這就是您可以輕鬆地從DataGrid中排除列的方式。

1

一旦我想到這一點很簡單。 MS讓我們保持良好狀態,因爲我們可以使用Path訪問ObservableCollection的T值的屬性。這將使用datagrid的結果更新可觀察的集合。我使用棱鏡作爲更新/插入側,使用綁定到保存按鈕的ICommand。我的查詢使用SQLite支持插入和更新使生活變得輕鬆的相同方法。爲了澄清,我使用Unity和Prism來關注MVVM。

<DataGrid Name="_dgProtocolSource" HorizontalAlignment="Left" Margin="-161,-61,-162,-163" AutoGenerateColumns="False" VerticalAlignment="Top" Width="365" Height="224" SelectionMode="Single" ItemsSource="{Binding OCSource, Mode=TwoWay}" CanUserAddRows="True" CanUserDeleteRows="True" > 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ColumnName1" Binding="{Binding Path=Property1}" /> 
      <DataGridTextColumn Header="ColumnName2" Binding="{Binding Path=Property2}"/> 
      <DataGridTextColumn Header="ColumnName3" Binding="{Binding Path=Property3}"/> 
     </DataGrid.Columns> 
+1

我嚴重懷疑這是OP想要的。此外,你的答案几乎不同於金塔納Meegamarachchi的。 – Tara 2016-08-13 03:54:27