【问题标题】:DataGrid Binding list string displays length but not the stringDataGrid绑定列表字符串显示长度但不显示字符串
【发布时间】: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,它就可以正常工作。

标签: c# wpf xaml datagrid


【解决方案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=.}"

【讨论】:

  • {Binding}{Binding Path=.} 是同一个东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2014-12-31
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多