Я создал DataGrid в WPF из DataTable с AutoGenerateColumns = true
. В VM у меня есть свойство команды для добавления и удаления столбцов, которые управляют базовым DataTable.WPF DataGrid Удалить столбец
Когда я вызываю AddColumn
из главного окна XAML через Command="{Binding AddColumn}"
, он работает так, как ожидалось, но когда я вызываю RemoveColumn из файла ресурсов с контекстным меню, он вызывает свойство команды (im способен выполнить код), но не выполняет обновите сетку.
<MenuItem Header="Delete" Command="{Binding Source={StaticResource AppViewModel}, Path=DeleteColumn}" CommandParameter="{Binding}" />
теперь я обновил обе команды только установить DataTable в нуль, т.е. Dt = null
и для AddColumn это работает, как ожидалось, и удалили сетки и столбцов, но для RemoveColumn он ничего не делает ... Я также не вижу ошибки в окне вывода в отношении привязки и при переходе через код, вызываемый свойством. Я также попытался установить столбец в невидимый, который также не работал.
UPDATE
Я называю DeleteColumn из следующего (упрощенный) кода в файле ресурсов.
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center" />
<Style.Triggers>
<DataTrigger Binding="{Binding Content, ConverterParameter=*, Converter={StaticResource AfterDashConverter}, RelativeSource={RelativeSource self}}" Value="Green">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Command="{Binding Source={StaticResource AppViewModel}, Path=DeleteColumn}" />
</ContextMenu>
</Grid.ContextMenu>
<DataGridColumnHeader x:Name="PART_FillerColumnHeader" IsHitTestVisible="False"/>
<ItemsPresenter/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
команды очень просты, AddColumn работает как сво непосредственно в моем главном экране и DeleteColumn не как его в указанном файле ресурсов. Я правильно проверил команды.
AddColumn = new RelayCommand(_ =>
{
Dt = null;
}, true);
DeleteColumn = new RelayCommand(column =>
{
Dt = null;
}, true);
возможно дубликат [? есть ли способ, чтобы скрыть определенный столбец в DataGrid при AutoGenerateColumns = True] (http://stackoverflow.com/questions/4000132/is-there-a-way- to-hide-a-specific-column-in-a-datagrid-when-autogeneratecolumns) – stuartd
выше при загрузке, мне нужно это от кнопки команда на разовой основе – InContext
@InContext Это странно пытается использовать тот же поток и получать разные результаты. Можете ли вы опубликовать еще какой-нибудь код? Может быть, AddCommand из XAML или их реализации? –