DataGrid绑定列表字符串显示长度但不显示字符串

Posted

技术标签:

【中文标题】DataGrid绑定列表字符串显示长度但不显示字符串【英文标题】:DataGrid Binding list string displays length but not the string 【发布时间】:2018-08-09 18:37:52 【问题描述】:

我的视图模型中有一个字符串列表,该列表在运行时使用 Events.csv 等文件名填充。我将此列表作为项目源绑定到 DataGrid,但它显示字符串的长度而不是字符串.请帮忙。

不用担心 INotifyPropertyChanged 和 DATACONTEXT。 DataContext 正确设置为 此视图中的DetailedRunInformationViewModel 和其他数据已正确填充。

请在我调试时查看随附的屏幕截图。

视图模型:

public class DetailedRunInformationViewModel : RunRelatedErrors
    
public List<string> AllFilesGeneratedList  get; set; 
public DetailedRunInformationViewModel(int sessionID, RunData runData)
        
          DisplayAllFiles();
        
public void DisplayAllFiles()
        
            if (_runData != null)
            
                if (_runData.CSVDataInDataTableFormatForEachFile != null && _runData.CSVDataInDataTableFormatForEachFile.Count > 0)
                
                    if (AllFilesGeneratedList == null)
                    
                        AllFilesGeneratedList = new List<string>();
                    
                    foreach(var key in _runData.CSVDataInDataTableFormatForEachFile.Keys)
                    
                        AllFilesGeneratedList.Add(key);
                    
                
            
        
    

在xml中

<DataGrid
                    x:Name="AllRunFiles"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top"
                    Margin="StaticResource AllControlsMargin"
                    ItemsSource="Binding AllFilesGeneratedList"
                    AutoGenerateColumns="True">
                    <i:Interaction.Triggers>
                        <i:EventTrigger
                            EventName="SelectionChanged">
                            <i:InvokeCommandAction
                                Command="Binding OpenSelectedFile"
                                CommandParameter="Binding ElementName=AllRunFiles,Path=SelectedValue"></i:InvokeCommandAction>
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                    <DataGrid.ItemTemplate>
                        <DataTemplate>
                            <TextBlock
                                Text="Binding"
                                Style="StaticResource TextBlockHyperlinkStyle"></TextBlock>
                        </DataTemplate>
                    </DataGrid.ItemTemplate>

                </DataGrid>

【问题讨论】:

是的,我想设置 ItemTemplate,因为我有一个需要应用于文本的超链接样式。 CSVDataInDataTableFormatForEachFile 是一个字典。每个字符串键类似于“Events.csv”、“A1_Rt_234.csv”等 我保留了一个断点,它清楚地显示了一个字符串而不是计数。 无论如何,如果我使用 ItemsControl 而不是 DataGrid,它就可以正常工作。 How come my databinding is writing out the Length property?的可能重复 【参考方案1】:

您的DataGrid 需要有一个Columns 定义,并设置为AutoGenerateColumns="False",这样您就可以更好地控制您的显示方式。

<DataGrid>
    <i:Interaction.Triggers>
    ...
    </i:Interaction.Triggers>
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="File Name">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="Binding"></TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

我也没有检查这个,但我认为您可能需要将您的 TextBlock Text="Binding" 更改为 TextBlock Text="Binding Path=."

【讨论】:

BindingBinding Path=. 是同一个东西

以上是关于DataGrid绑定列表字符串显示长度但不显示字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 FLEX 中动态改变 Datagrid 列的宽度

从List与对象绑定

将datagrid WPF绑定到带有列表的两个不同类?

将对象列表数据绑定到 WinForms DataGridView,但不显示某些公共属性

如何使 WPF DataGrid 显示具有绑定和 DataTemplate 的 ViewModel 集合

WPF DataGrid 绑定到 string.Length 而不是字符串文本