【问题标题】:wpf databinding and x:Arrayswpf 数据绑定和 x:Arrays
【发布时间】:2010-11-09 06:31:29
【问题描述】:

我尝试进行一些涉及资源中定义的 x:Array 的数据绑定,但不知何故,即使代码正在编译,它也不起作用。 在资源中,我以这种方式定义了一个字符串数组:

<x:Array x:Key="ArrayReportType" Type="{x:Type sys:String}">
    <sys:String>Energy Export</sys:String>
    <sys:String>Cost Center Report</sys:String>
</x:Array>

我还有一个对象集合。其中一个属性称为“ReportType”,是一个整数/枚举。 所以我想进行数据绑定以将相应的字符串显示给 ReportType 而不是 int/enum。 我试过这条线,但它不起作用(第二行导致pb):

<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Type"
                    Binding="{Binding Source={StaticResource ArrayReportType}, Path=[{Binding ReportType}]}" />

我确定,我已经接近解决方案了。如果我直接写“Path=[1]”,那就对了。 在运行时,我收到此错误:

System.Windows.Data 错误:40:BindingExpression 路径错误:在“object”“String[]”(HashCode=14199578)上找不到“[]”属性。 BindingExpression:Path=[{Binding ReportType}]; DataItem='String[]' (HashCode=14199578);目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)

任何帮助将不胜感激。

【问题讨论】:

    标签: wpf arrays data-binding


    【解决方案1】:

    可以使用 DataGridComboBoxColumn 吗?

    <DataGridComboBoxColumn Header="Type"
                            ItemsSource="{Binding Source={StaticResource ArrayReportType}}">
        <DataGridComboBoxColumn.EditingElementStyle>
            <Style TargetType="{x:Type ComboBox}">
                <Setter Property="SelectedIndex" Value="{Binding ReportType}" />
            </Style>
        </DataGridComboBoxColumn.EditingElementStyle>
        <DataGridComboBoxColumn.ElementStyle>
            <Style TargetType="{x:Type ComboBox}">
                <Setter Property="SelectedIndex" Value="{Binding ReportType}" />
            </Style>
        </DataGridComboBoxColumn.ElementStyle>
    </DataGridComboBoxColumn>
    

    更新
    只读文本单元格

    <DataGridComboBoxColumn Header="Type"
                            ItemsSource="{Binding Source={StaticResource ArrayReportType}}"
                            IsReadOnly="True">
        <DataGridComboBoxColumn.ElementStyle>
            <Style TargetType="{x:Type ComboBox}">
                <Setter Property="SelectedIndex" Value="{Binding ReportType}" />
            </Style>
        </DataGridComboBoxColumn.ElementStyle>
    </DataGridComboBoxColumn>
    

    【讨论】:

    • 嗯,这是我作为解决方法的想法之一。但如果可能的话,我想“简单地”在单元格中显示字符串。 WPF 这么强大,应该可以的!
    • 是的,你比我快!!我刚刚看到,如果我将其设置为只读,那么,comboxbox 只会显示为普通文本!非常感谢!
    • 好吧,还有一个问题:我怎样才能使这一列可排序?!?我应该在“SortMemberPath”中放什么?
    • @Fred:我试过了,在使用 SortMemberPath="ReportType" 时它似乎工作正常。这给了我按索引升序/降序排序。你希望它如何排序?
    • 嗯,这就是重点。我希望它按“字符串”而不是按索引排序。
    【解决方案2】:

    也许您可以使用专用转换器解决此问题。

    类似的东西?

    <DataGridTextColumn 
        Header="Type"
        Text="{Binding Converter={StaticResource IndexToArrayItemConverter}, ConverterParameter={StaticResource ArrayReportType}, Path=ReportType}"/>
    

    因为太明显而跳过了转换器代码

    【讨论】:

    • 嗯,这可能是一个解决方案,但是......我必须写一个转换器!我想要一个 100% xaml 解决方案!
    • 我认为没有办法在纯 XAML 中做到这一点。 Path=[?] 可能需要一个常量或属性,而不是绑定扩展。
    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 2023-03-12
    • 2010-09-15
    • 1970-01-01
    • 2013-05-23
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多