Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WPF中的数据绑定数据网格中排除列_C#_Wpf_Data Binding_Datagrid_Blend - Fatal编程技术网

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>