标签: datagridtemplatecolumn

如何在WPF Toolkit DataGrid上对DataGridTemplateColumn进行排序?

我有一个带有一个DataGridTemplateColumn的WPF Toolkit DataGrid.我在网格属性中指定了我希望所有列都可以排序,但DataGridTemplateColumn不允许它.所有其他列都允许排序.我甚至尝试过明确地将CanUserSort设置为true,但没有运气.甚至可以对模板列进行排序吗?我提供了一个适用于所有列的自定义排序器,但标题不允许排序点击.

<Controls:DataGrid ItemsSource="{Binding Events}" AutoGenerateColumns="False" 
                               CanUserSortColumns="True" 
                               CanUserReorderColumns="False" 
                               Sorting="DataGrid_Sorting" 
                               x:Name="EventsGrid">
                <Controls:DataGrid.Columns>
                    <Controls:DataGridTemplateColumn Header="Type" Width="42" CanUserResize="False">
                        <Controls:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Image Source="{Binding EventTypeImage, Mode=OneWay}" HorizontalAlignment="Center" Width="16"/>
                            </DataTemplate>
                        </Controls:DataGridTemplateColumn.CellTemplate>
                    </Controls:DataGridTemplateColumn>
                    <Controls:DataGridTextColumn Header="Source" 
                                           Binding="{Binding Source, Mode=OneWay}" />
                    <Controls:DataGridTextColumn Header="Details" MinWidth="175" 
                                           Binding="{Binding Details, Mode=OneWay}" />
                    <Controls:DataGridTextColumn Header="Timestamp" MinWidth="175"  
                                           Binding="{Binding Timestamp, Mode=OneWay}" 
                                           IsReadOnly="True"/>
                </Controls:DataGrid.Columns>
            </Controls:DataGrid>
Run Code Online (Sandbox Code Playgroud)

sorting wpf wpftoolkit datagridtemplatecolumn

89
推荐指数
3
解决办法
3万
查看次数

WPF Datagrid -DataGridTemplateColumn选项卡焦点问题

我正在使用Microsoft WPF数据网格.我注意到WPF datagrid DataGridTemplateColumn有一个奇怪的行为.当您在网格中使用templateColumn并且当您从上一列中进行选项卡时,模板列包含一些控件时,焦点不会自动赋予模板列中声明的第一个元素.最初设置在模板列的边框上,当我们选择agin时,焦点将转到第一列.此问题的任何解决方法.当我关闭时,如何设置焦点以转到datagrid的模板列中的第一个元素.

wpf datagrid datagridtemplatecolumn

18
推荐指数
3
解决办法
1万
查看次数

WPF - 如何绑定DataGridTemplateColumn

我试图获取与特定关联的属性的名称DataGridColumn,以便我可以基于此做一些事情.当用户单击列标题上的上下文菜单项时,将调用此函数...

对于开箱即用的现成滚动列类型来说这很好DataGridTextColumn,因为它们是绑定的,但问题是我的一些列DataGridTemplateColumns是未绑定的.

private void GroupByField_Click (object sender, RoutedEventArgs e){
        MenuItem mi = (MenuItem)sender;
        ContextMenu cm = (ContextMenu) mi.Parent;
        DataGridColumnHeader dgch = (DataGridColumnHeader) cm.PlacementTarget;  
        DataGridBoundColumn dgbc = (DataGridBoundColumn) dgch.Column;
        Binding binding = (Binding) dgbc.Binding;
        string BoundPropName = binding.Path.Path;

        //Do stuff based on bound property name here...
    }
Run Code Online (Sandbox Code Playgroud)

所以,以我的Name专栏为例......它是一个DataGridTemplateColumn(因为它有一个图像和其他一些东西).因此,它实际上并没有绑定到'Name'属性...但我希望如此,以便上面的代码可以工作.

我的问题是两部分的,真的:

  1. 是否有可能成为一个DataGridTemplateColumnBOUND,以便上述代码可以工作?我能以某种方式将它绑定到一个属性吗?

  2. 或者我需要完全不同的东西,并更改上面的代码?

提前致谢!

c# wpf binding datagrid datagridtemplatecolumn

18
推荐指数
2
解决办法
6万
查看次数

DataGridTemplateColumn(ComboBox,DatePicker)重置/清除并不触发AddingNewItem

我已经将问题缩小到以下具有三列DataGrid的示例.

XAML:

<Window x:Class="DataGridColumnTemplate_NotFiringAddingNewItem.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid x:Name="dg" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="299" AutoGenerateColumns="False" Width="497" AddingNewItem="dg_AddingNewItem" CanUserAddRows="True">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="DateWorks">
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding InvoiceDate}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="DateDoesn'tWork">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding InvoiceDate}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding InvoiceDate}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Header="Text" Binding="{Binding Description}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

C#:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        List<JobCostEntity> l = new List<JobCostEntity>()
        { 
            new JobCostEntity() { …
Run Code Online (Sandbox Code Playgroud)

c# wpf combobox datepicker datagridtemplatecolumn

18
推荐指数
3
解决办法
1291
查看次数

DataGridTemplateColumn:在使用ItemsSource之前,Items集合必须为空.

为什么是错误代码:

        <dg:DataGrid  Name="dataGrid" AutoGenerateColumns="False"                                  
                HeadersVisibility="Column" SelectedIndex="-1" Margin="0,315,0,0" Background="#FF484040" BorderBrush="#FF484040">
        <dg:DataGrid.Columns>
            <dg:DataGridTextColumn Binding="{Binding IdBook}" Header="IdBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding NameBook}" Header="NameBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding Author}" Header="Author"></dg:DataGridTextColumn>
        </dg:DataGrid.Columns>

        <dg:DataGridTemplateColumn Header="Delete">

            <dg:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Style="{DynamicResource GlassButton}" Background="{DynamicResource DeleteButton}">

                    </Button>
                </DataTemplate>
            </dg:DataGridTemplateColumn.CellTemplate>

            </dg:DataGridTemplateColumn>
    </dg:DataGrid>
Run Code Online (Sandbox Code Playgroud)

以下代码是正确的:

        <dg:DataGrid  Name="dataGrid" AutoGenerateColumns="False"                                  
                HeadersVisibility="Column" SelectedIndex="-1" Margin="0,315,0,0" Background="#FF484040" BorderBrush="#FF484040">
        <dg:DataGrid.Columns>
            <dg:DataGridTextColumn Binding="{Binding IdBook}" Header="IdBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding NameBook}" Header="NameBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding Author}" Header="Author"></dg:DataGridTextColumn>
        </dg:DataGrid.Columns>

    </dg:DataGrid>
Run Code Online (Sandbox Code Playgroud)

但我无法添加按钮到datagrid

wpf binding datagrid datagridtemplatecolumn

14
推荐指数
1
解决办法
2万
查看次数

DataGridTemplateColumn双向绑定不起作用

我有一个数据网格,我已经绑定到SqlDataApter.如果我使用DataTextColumn为网格设置XAML,如下面的代码所示,它可以很好地工作

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="27,42,0,0" Name="dataGrid1" VerticalAlignment="Top"  AreRowDetailsFrozen="True">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding KEY}" Visibility="Hidden" IsReadOnly="True"></DataGridTextColumn>
            <DataGridTextColumn Binding="{Binding CHARACTERISTIC_CODE}" Header="Unit" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding UNIT_CHAR}" Header="Unit" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding IC_DEF_CHAR_NUMERIC}" Header="Number" IsReadOnly="False"/>
            <DataGridTextColumn Binding="{Binding IC_DEF_CHAR_TEXT}"  Header="Text" IsReadOnly="False" />
            <DataGridTextColumn Binding="{Binding IsNumeric}"  Header="Status" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding IsText}" Header="Status" IsReadOnly="True" />
        </DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)

我使用dataGrid1.ItemsSource = dTable.DefaultView将其绑定到代码中的数据表,并使用SqlDataAdapter更新方法dAdapter.Update(dTable)保存更改的按钮

问题是我想在记录为NoNumeric时禁用编辑IC_DEF_CHAR_TEXT字段,而在记录IsText时禁用IC_DEF_CHAR_TEXT.我尝试绑定到IsReadOnly属性但发现它不可绑定,因此我为这两个字段创建了模板,并将IsEnabled属性绑定到IsText和IsNumeric字段.

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="27,42,0,0" Name="dataGrid1" VerticalAlignment="Top"  AreRowDetailsFrozen="True">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding KEY}" Visibility="Hidden" IsReadOnly="True"></DataGridTextColumn>
            <DataGridTextColumn Binding="{Binding CHARACTERISTIC_CODE}" Header="Unit" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding UNIT_CHAR}" Header="Unit" IsReadOnly="True" />
            <DataGridTemplateColumn …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf datagrid datagridtemplatecolumn two-way-binding

14
推荐指数
1
解决办法
1万
查看次数

如何重用WPF DataGridTemplateColumn(包括绑定)

在WPF数据网格中,我有一个定义为DataGridTemplateColumn的列,我需要在各种列上使用它.作为一个非常简单的例子,请将以下内容视为虚拟样本:

<DataGrid ItemsSource="{Binding Path=ItemList, Mode=OneWay}" AutoGenerateColumns="False" >                
    <DataGrid.Columns>

        <DataGridTemplateColumn Header="Name" MinWidth="130" Width="Auto">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <DockPanel LastChildFill="True">
                        <Image Source="component/Images/test.png"/>
                        <TextBlock Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
                    </DockPanel>                                
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <DockPanel LastChildFill="True">
                        <Image Source="component/Images/test.png"/>
                        <TextBox Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
                    </DockPanel>
                </DataTemplate>                            
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

        <DataGridTextColumn Header="Company" Binding="{Binding Company, ValidatesOnDataErrors=True}" MinWidth="115" Width="Auto"/>                    
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

举一个简单的例子,我如何将Header = Name的用于列的相同模板应用于Header = Company的列,而不必为每列重现整个模板?

我已经在之前的SO问题中找到了答案,他们用以下资源解释:

<Application.Resources> 
     <DataTemplate x:Key="CellTemplate"> 
     ... 
     </DataTemplate> 
     <DataTemplate x:Key="CellEdintingTemplate"> 
     ... 
     </DataTemplate> 
</Application.Resources> 

<DataGrid Style="{StaticResource MainGridStyle}"> 
    <DataGrid.Columns> 
        <DataGridTemplateColumn CellTemplate="{StaticResource MyFirstColumnCellTemplate}" CellEdintingTemplate="{StaticResource MyFirstColumnCellEdintingTemplate}"/> 
        ... 
    </DataGrid.Columns> 
<DataGrid> …
Run Code Online (Sandbox Code Playgroud)

wpf resources datagridtemplatecolumn

13
推荐指数
2
解决办法
1万
查看次数

如何使用wpf将多个控件添加到数据网格的DataGridTemplateColumn?

我有几个实例,我想在数据网格中的单个列中有几个控件.

例如,我有一个数据集,其中包含具有匹配描述,图像源,时间戳,地理标记等的图像.我想在一列中显示此信息的缩略图图像,在文本框或标签中显示大部分数据.我需要的其他数据集是textbox/checkbox,或者是textbox/combobox.

当我尝试添加第二个控件时,我收到一个错误,报告属性"VisualTree"设置了多次.

<DataGridTemplateColumn Header="Data" Width="100">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Label Name="Description" Content="{Binding Desc}"></Label>
            <Label Name="Camera" Content="{Binding Camera}"></Label>
        </DataTemplate>      
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

wpf datagrid datagridtemplatecolumn

12
推荐指数
1
解决办法
1万
查看次数

绑定DataGridTemplateColumn

似乎我试图在我的DataGrid上使用DataTemplates.我要做的是使用一个模板为每个单元格显示两行文本.但似乎不可能以任何方式绑定列.

以下代码希望显示我想做的事情.请注意每列的Binding:模板列没有这样的东西,因此,这个xaml可能无法工作.

<Window.Resources>
    <DataTemplate x:Key="DoubleField">
        <StackPanel>
            <TextBlock Text="{Binding Value1}"/>
            <TextBlock Text="{Binding Value2}"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn CellTemplate="{StaticResource DoubleField}" Binding="{Binding Title}"/> // <- Binding does not exist for templatecolumn, I only wish it did
        <DataGridTemplateColumn CellTemplate="{StaticResource DoubleField}" Binding="{Binding Price}"/> // <- Binding does not exist for templatecolumn, I only wish it did
        <DataGridTemplateColumn CellTemplate="{StaticResource DoubleField}" Binding="{Binding Stuff}"/> // <- Binding does not exist for templatecolumn, I only wish it did
    </DataGrid.Columns>
</DataGrid>

class MyListItem {
    class DoubleItem {
        string …
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid datatemplate datagridtemplatecolumn

12
推荐指数
1
解决办法
6184
查看次数

带有ComboBox绑定的WPF DataGridTemplateColumn(MVVM模式)

我正在使用以下WPF DataGrid + ComboBox方案来疯狂.

我有一组看起来像的课程;

class Owner
{
    int ID { get; }
    string Name { get; }

    public override ToString()
    { 
        return this.Name;
    }
}

class House
{
    int ID { get; }
    Owner HouseOwner { get; set; }
}

class ViewModel
{
    ObservableCollection<Owner> Owners;
    ObservableCollection<House> Houses
}
Run Code Online (Sandbox Code Playgroud)

现在我想要的结果是一个DataGrid,它显示了House类型的行列表,在其中一列中,是一个ComboBox,它允许用户更改House.HouseOwner的值.

在这种情况下,网格的DataContext是ViewModel.Houses,对于ComboBox,我希望ItemsSource绑定到ViewModel.Owners.

这甚至可能吗?我正在努力解决这个问题...我能做的最好的事情就是正确地绑定ItemsSource,但是ComboBox(在DataGridTemplateColumn中)没有在每一行中显示House.HouseOwner的正确值.

注意:如果我将ComboBox从图片中取出并将TextBlock放入DataTemplate中,我可以正确地看到每行的值,但同时获取ItemsSource以及在选择中显示正确的值对我来说不起作用...

里面的背后我的代码,我已经设置窗口在DataContext到视图模型和对电网的DataContext设置ViewModel.Houses.对于除这个组合框之外的所有东西,它正在工作......

我的XAML对于违规列看起来像;

<DataGridTemplateColumn Header="HouseOwner">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Path=DataContext.Owners, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                        DisplayMemberPath="Name"
                        SelectedItem="{Binding HouseOwner, RelativeSource={RelativeSource AncestorType={x:Type …
Run Code Online (Sandbox Code Playgroud)

wpf binding datagrid combobox datagridtemplatecolumn

11
推荐指数
2
解决办法
3万
查看次数