2

我有一个有两个级别的集合的类。该软件是关于工资支付的。这个想法是由多个有偿员工组成的支付行为。每个员工都可以多次减薪。对象看起来像:

Payment -->Payment Object
  Date
  ID
  Employees: -->ObservableCollection of EmpPayment Objects
     Emp A   -->And EmpPayment Object
        Name
        TotalCut --> An Integer Readonly Property that sums the Cuts.
        Cuts   --> Collection of Cut object
           Cut1  --> Cut object 1
           Cut2  --> Cut object 2
     Emp B
        Name
        TotalCuts
        Cuts
           Cut1
           Cut2

我正在使用超出 DataGrid。到目前为止一切顺利,除了我想使用 CellContentTemplate 在一列中显示两个值,即 Cuts 和 TotalCut。所以数据网格看起来像:

Employee | Cuts
Emp A    | [The Total Cut]
           Cut 1
           Cut 2
Emp B    | [The Total Cut]
           Cut 1
           Cut 2

在剪辑栏,我想使用 Xceed DropDownButton 来显示总数,用户可以通过编辑下拉内容来编辑剪辑。到目前为止,我为员工 ObservableCollection 制作的 XAML:

<xcdg:DataGridControl x:Name="GridEmployees" ItemsSource="{Binding Employees}" AutoCreateColumns="False">
    <xcdg:DataGridControl.Columns>
        <xcdg:Column FieldName="Name" Title="Employee"/>

        <xcdg:Column FieldName="Cuts" Title="Cuts">
            <xcdg:Column.CellContentTemplate>
                <DataTemplate>
                    <xctk:DropDownButton Content="{Binding Path=TOTALCUT}">
                        <xctk:DropDownButton.DropDownContent>
                            <ListBox ItemsSource="{Binding}">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBox Text="{Binding CutDescription}"/>
                                            <TextBox Text="{Binding Amount}"/>
                                        </StackPanel>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </xctk:DropDownButton.DropDownContent>
                    </xctk:DropDownButton>
                </DataTemplate>
            </xcdg:Column.CellContentTemplate>
        </xcdg:Column>

    </xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

绑定到 Cuts ObservableCollection 效果很好,但不是 TotalCut。如何将 TotalCut [特意用上面所有大写字母写成] 绑定到同一列?使用两列是可能的,但不会很漂亮。

4

2 回答 2

3

忘记 XCeed DataGridControl,欢迎使用标准 DataGrid。只需在那里使用 DataGridTemplateColumn 。

另一种选择是在 XCeed DataGridControl 中使用两列,这不是很漂亮。

于 2013-03-16T03:04:02.247 回答
1

您所要做的就是提供您自己的单元格编辑器和 CellTemplate,它们将绑定到相应的属性。这是我的工作解决方案:

    <xcdg:DataGridControl AutoCreateColumns="False" ItemsSource="{Binding Items}">
    <xcdg:DataGridControl.View>
        <xcdg:TableflowView ScrollingAnimationDuration="0" ContainerHeight="44"/>
    </xcdg:DataGridControl.View>
    <xcdg:DataGridControl.Resources>
        <DataTemplate x:Key="EditDataTemplate"  DataType="wpfApplication1:State">
            <StackPanel>
                <TextBox Text="{Binding Path=Name}"/>
                <TextBox Text="{Binding Path=Post}"/>
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Key="ReadDataTemplate"  DataType="wpfApplication1:State">
            <StackPanel>
                <TextBlock HorizontalAlignment="Right" Text="{Binding Path=Name}"/>
                <TextBlock HorizontalAlignment="Right" Text="{Binding Path=Post}"/>
            </StackPanel>
        </DataTemplate>
    </xcdg:DataGridControl.Resources>
    <xcdg:DataGridControl.Columns>
        <xcdg:Column FieldName="Zip" Title="Zip"/>
        <xcdg:Column FieldName="Stat" Title="Zip2"
                     CellContentTemplate="{StaticResource ReadDataTemplate}">
            <xcdg:Column.CellEditor>
                <xcdg:CellEditor EditTemplate="{StaticResource EditDataTemplate}"/>
            </xcdg:Column.CellEditor>
        </xcdg:Column>    
    </xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

和“数据对象”的代码隐藏:

public class User
{
    private string _zip;

    public string Zip
    {
        get { return _zip; }
        set
        {
            _zip = value;
            Stat = new State();
            Stat.Name = "stat: " + value;
        }
    }

    public State Stat { get; set; }
}

public class State
{
    public string Name { get; set; }
    public string Post { get; set; }
}

完整的解决方案代码

于 2013-08-05T12:04:09.237 回答