C# 从WPF中的数据绑定数据网格中排除列
我有一个C# 从WPF中的数据绑定数据网格中排除列,c#,wpf,data-binding,datagrid,blend,C#,Wpf,Data Binding,Datagrid,Blend,我有一个observeCollection,其中SolarSystemViewModel来自ViewModelBase。ViewModelBase公开了当我绑定到我的observeCollection时在数据网格中显示的IsInDesignMode和IsInDesignModeStatic。默认情况下,如何从datagrid中隐藏这些列,而不必使用Blend生成XAML,然后手动禁用这些列 谢谢 例如: 请尝试手动定义列。。类似于……的东西 <dg:DataGrid x:Name="myD
observeCollection
,其中SolarSystemViewModel
来自ViewModelBase
。ViewModelBase
公开了当我绑定到我的observeCollection
时在数据网格中显示的IsInDesignMode
和IsInDesignModeStatic
。默认情况下,如何从datagrid中隐藏这些列,而不必使用Blend生成XAML,然后手动禁用这些列
谢谢
例如:
请尝试手动定义列。。类似于……的东西
<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>
您不必使用blend,只需使用VS XAML编辑器即可我也一直在寻找这个问题的答案。 这里有一个非常好的解决方案: 像这样绑定DataGrid的属性“OnAutoGeneratingColumn”(注意XAML不是100%完整):
“e.Cancel=true;”将阻止生成当前列。这就是从数据网格中轻松排除列的方法。我一想到这一点就非常简单了。MS给我们留下了良好的状态,因为我们可以使用路径访问ObservableCollection的T值的属性。这将使用来自datagrid的结果更新可观察集合。我使用绑定到保存按钮的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>
假设您使用的是AutoGenerateColumns=True
,则无法使用默认数据网格。您需要在视图中创建所需的特定列。也许。@MetroSmurf我没有自动生成列,但我意识到我的问题非常愚蠢。Thanks@forTruce-这不是一个愚蠢的问题。已经有足够多的人准备做出判断,所以不要质疑自己。你不知道你不知道的,这就是为什么我们有这样的论坛。继续提问,继续学习,忽略那些忘记自己曾经是初学者的人。我严重怀疑这是OP想要的。此外,你的答案与Chintana Meegamarachchi的答案几乎没有什么不同。
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
PropertyDescriptor propertyDescriptor = (PropertyDescriptor)e.PropertyDescriptor;
e.Column.Header = propertyDescriptor.DisplayName;
if (propertyDescriptor.DisplayName == "IsInDesignMode")
{
e.Cancel = true;
}
}
<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>