我在尝试根据结构下方的Unbound字段(具有非简单的后端结构)更改单元格背景颜色时遇到困难。这是示例“复杂”结构:
public class TestTable
{
public int order { get; set; }
public TestMember t1 { get; set; }
public TestMember t2 { get; set; }
public TestMember t3 { get; set; }
}
public class TestMember
{
public TestMember(String i)
{
value = i;
}
public String value { get; set; }
}
这是XAML:
<igDP:XamDataGrid Name="xamDataGrid1">
<igDP:XamDataGrid.ViewSettings>
<igDP:GridViewSettings UseNestedPanels="False"/>
</igDP:XamDataGrid.ViewSettings>
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings AllowRecordFiltering="true" FilterLabelIconDropDownType="MultiSelectExcelStyle"
AllowEdit="False" AllowFixing="No" AllowSummaries="True"/>
</igDP:XamDataGrid.FieldSettings>
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AutoGenerateFields="False" FilterUIType="LabelIcons"
HeaderPrefixAreaDisplayMode="FieldChooserButton" AllowClipboardOperations="All"
CopyFieldLabelsToClipboard="True" AddNewRecordLocation="OnTopFixed"
AllowAddNew="False" HighlightAlternateRecords="False" ExpansionIndicatorDisplayMode="Never"
/>
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout Key="Layout0">
<igDP:FieldLayout.SortedFields>
<igDP:FieldSortDescription FieldName="order" Direction="Ascending"></igDP:FieldSortDescription>
</igDP:FieldLayout.SortedFields>
<igDP:FieldLayout.Fields>
<igDP:Field Name="order" Label="Ordinamento" AllowGroupBy="False" Visibility="Collapsed" FixedLocation="FixedToNearEdge"/>
<igDP:UnboundField BindingMode="TwoWay" BindingPath="t1.value" Name="value" AllowEdit="True" Label="Anno Recoil" AllowGroupBy="False" FixedLocation="FixedToNearEdge"/>
<igDP:UnboundField BindingMode="TwoWay" BindingPath="t2.value" Name="value" AllowEdit="True" Label="APC" FixedLocation="FixedToNearEdge"/>
<igDP:UnboundField BindingMode="TwoWay" BindingPath="t3.value" Name="value" Label="R1" AllowEdit="True" FixedLocation="FixedToNearEdge"/>
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
我想得到的是一个彩色网格,仅当根值为null时,单元格才为黑色,而叶值为null时,单元格为黑色。
所示网格是在第二列行中生成一个新的TestMember并将其值设置为null的结果。我希望他们不要被涂成黑色,并且对待方式有所不同。我已经厌倦了这个转换器:
<igDP:XamDataGrid.Resources>
<Style TargetType="{x:Type igDP:CellValuePresenter}">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource BackGroundConverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="Value" />
<Binding RelativeSource="{RelativeSource Self}" Path="DataContext"/>
<Binding RelativeSource="{RelativeSource Self}" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</igDP:XamDataGrid.Resources>
而且发生的是,当叶子值为null时,传递给多值转换器的CellValuePresenter没有附加字段,因此我找不到一种优雅的方式来检索值在哪个列中为null(通过root为null或leaf为null) ),并创建一种逻辑以适当的方式为单元着色。
在此先感谢您,如果我没有正确解释该问题,请发表评论。
再次感谢。
我通过声明一个多绑定转换器而不是像这样的简单样式和不同样式来解决了这个问题:
<Style TargetType="{x:Type igDP:CellValuePresenter}" x:Key="keyX">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource BackGroundConverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="Value" />
<Binding RelativeSource="{RelativeSource Self}" Path="DataContext"/>
<Binding Source="keyX"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
在multivalueconverter内,我根据传递的键进行检查。显然,在XamDataGrid中,您将样式绑定到了相应的字段,如下所示:
<igDP:UnboundField BindingMode="TwoWay" BindingPath="keyX.value" Name="value" AllowEdit="True" Label="Carica VN" FixedLocation="FixedToNearEdge">
<igDP:Field.Settings>
<igDP:FieldSettings CellValuePresenterStyle="{StaticResource keyX}" />
</igDP:Field.Settings>
</igDP:UnboundField>
并在MultiValueConverter中根据第三个绑定进行切换:
switch (columnValue)
{
case "keyX":
single = row.getKeyXValue();
colorToApply = getStandardColor(single);
break;
...
就这样。对我来说似乎很肮脏,但是由于我还没有找到一个优雅的解决方案,所以这可以工作
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句