我有一个ObservableCollection<SolarSystemViewModel>
whereSolarSystemViewModel
来自ViewModelBase
. 当我ViewModelBase
绑定IsInDesignMode
到IsInDesignModeStatic
我的ObservableCollection
. 如何在默认情况下从数据网格中隐藏这些列,而不必使用 Blend 生成 XAML,然后手动禁用这些列?
谢谢。
例子:
我有一个ObservableCollection<SolarSystemViewModel>
whereSolarSystemViewModel
来自ViewModelBase
. 当我ViewModelBase
绑定IsInDesignMode
到IsInDesignModeStatic
我的ObservableCollection
. 如何在默认情况下从数据网格中隐藏这些列,而不必使用 Blend 生成 XAML,然后手动禁用这些列?
谢谢。
例子:
我也一直在寻找这个问题的答案。这是一个非常好的解决方案:
像这样绑定 DataGrid 的属性“OnAutoGeneratingColumn”(注意 XAML 不是 100% 完成):
<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" />
在您的 CodeBehind 中:
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.取消=真;” 将阻止生成当前列。这就是您可以轻松地从 DataGrid 中排除列的方式。
一旦我想到它,这很简单。MS 让我们保持良好状态,因为我们可以使用 Path 访问 ObservableCollection 的 T 值的属性。这将使用来自数据网格的结果更新可观察的集合。我使用绑定到保存按钮的 ICommand 将 prism 用于更新/插入端。我使用 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>
请尝试手动定义列..类似的东西。
<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 编辑器