3

から派生したObservableCollection<SolarSystemViewModel>where があります。にバインドすると、公開され、データグリッドに表示されます。Blend で XAML を生成し、それらの列を手動で無効にすることなく、デフォルトでデータグリッドからこれらの列を非表示にするにはどうすればよいですか?SolarSystemViewModelViewModelBaseViewModelBaseIsInDesignModeIsInDesignModeStaticObservableCollection

ありがとう。

例: ここに画像の説明を入力

4

3 に答える 3

18

私もこの質問に対する答えを探していました。これはかなり良い解決策です:

DataGrid のプロパティ「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 から列を簡単に除外できます。

于 2014-02-03T10:13:10.763 に答える
4

これは、一度考えてみると非常に簡単です。Path を使用して ObservableCollection の T 値のプロパティにアクセスできるため、MS は私たちに良い形を残してくれました。これにより、監視可能なコレクションがデータグリッドからの結果で更新されます。保存ボタンにバインドされた 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>
于 2016-01-05T17:31:42.937 に答える