【问题标题】:Cannot set ItemsSource for XamComboEditor in a XamDataGrid无法在 XamDataGrid 中为 XamComboEditor 设置 ItemsSource
【发布时间】:2014-07-17 09:52:19
【问题描述】:

我需要显示来自一个类的XamDataGrid 数据,该类包含一些属性和其中一个属性的有效选择列表。比如:

public class DataViewModel
{
    public string Identifier {get;private set;}
    public string Value {get;set;}
    public IEnumeranble<string> ValidValues {get; set;}
}

我正在尝试将设置设置为XamDataGrid,以便我有一个不可编辑的Identifier 列和一个可通过XamComboEditor 编辑的Value 列。这是我想出的 xaml:

    <igDP:XamDataGrid GroupByAreaLocation="None">
        <igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:FieldLayoutSettings AutoGenerateFields="False"/>
        </igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:XamDataGrid.FieldLayouts>
            <igDP:FieldLayout>
                <igDP:FieldLayout.Fields>
                    <igDP:Field Name="Identifier"/>
                    <igDP:Field Name="Value">
                        <igDP:Field.Settings>
                            <igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}">
                                <igDP:FieldSettings.EditorStyle>
                                    <Style TargetType="{x:Type igEditors:XamComboEditor}">
                                        <Setter Property="IsEditable" Value="False" />
                                        <Setter Property="ItemsSource" Value="{Binding Path=DataContext.DataItem.Values, 
                    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igEditors:XamComboEditor}}}" />
                                    </Style>
                                </igDP:FieldSettings.EditorStyle>
                            </igDP:FieldSettings>
                        </igDP:Field.Settings>
                    </igDP:Field>
                </igDP:FieldLayout.Fields>
            </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
    </igDP:XamDataGrid>

XamDataGrid 上的数据绑定工作正常,但 XamComboEditor.ItemsSource 上的绑定不起作用,但我不确定如何修复 id。你有什么想法吗?

【问题讨论】:

    标签: c# infragistics xamdatagrid


    【解决方案1】:

    我找到了另一种使用事件的方法。

    在 XAML 中,我必须指定这些设置,而不是我拥有的:

                                <igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}">
                                    <igDP:FieldSettings.EditorStyle>
                                        <Style TargetType="{x:Type igEditors:XamComboEditor}">
                                            <Style.Setters>
                                                <EventSetter Event="Loaded" Handler="XCEloaded"/>
                                                <Setter Property="IsEditable" Value="False" />
                                            </Style.Setters>
                                        </Style>
                                    </igDP:FieldSettings.EditorStyle>
                                </igDP:FieldSettings>
    

    我用这段代码处理了这个事件:

        private void XCEloaded(object sender, RoutedEventArgs e)
        {
            var drp = Utilities.GetAncestorFromType(sender as DependencyObject, typeof(DataRecordPresenter), true) as DataRecordPresenter;
            if (drp.DataRecord.DataItem != null)
                (sender as XamComboEditor).ItemsSource = (drp.DataRecord.DataItem as DataViewModel).ValidValues;
        }
    

    它看起来不是最干净的解决方案,但至少它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多