2013-02-12 5 views
0

ObservableCollection<SolarSystemViewModel>이 있는데 SolarSystemViewModelViewModelBase에서 파생됩니다. ViewModelBaseObservableCollection에 바인딩하면 데이터 격자에 나타나는 IsInDesignModeIsInDesignModeStatic을 노출합니다. Blend를 사용하여 XAML을 생성하지 않고도 수동으로 해당 열을 데이터 격자에서 숨기려면 어떻게해야합니까?WPF에서 데이터 바인딩 된 DataGrid의 열을 제외합니다.

감사합니다.

예 : enter image description here

+2

'AutoGenerateColumns = True'를 사용한다고 가정하면 기본 DataGrid를 사용할 수 없습니다. 보기에 원하는 특정 열을 만들어야합니다. –

+1

[도움이] (http://stackoverflow.com/q/4000132/620360). – LPL

+0

@MetroSmurf 열을 자동 생성하지는 않지만 내 질문이 너무 어리 석다는 것을 깨달았습니다. 감사합니다 – forTruce

답변

0

수동으로 시도해보세요 ..의 라인을 따라 뭔가를 열을 정의. 나도이 질문에 대한 대답을 찾고 있었어요

9

당신은 이것에 대한 조화를 사용할 필요 없다

<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> 

, 그냥 VS XAML 편집기를 사용합니다.

바인드 재산 "OnAutoGeneratingColumn의"데이터 그리드의이 같은 (주의 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는 경로를 사용하여 ObservableCollection의 T 값의 속성에 액세스 할 수 있기 때문에 좋은 모양을 유지했습니다. 그러면 observable 컬렉션이 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가 원했던 것임을 진지하게 의심합니다. 또한 당신의 대답은 Chintana Meegamarachchi 's와 거의 다릅니다. – Tara

관련 문제