C# 在XAML中将行详细信息添加到DataGrid
我制作了一个wpf数据网格,它从文件名及其分数列表中调用。 网格工作得很好,现在我尝试让用户可以点击一行,它显示文件内容本身(文本文件)。 文本字符串非常大,因此我不希望它成为列表的属性。相反,我希望文件路径成为属性,每当我单击一行时,拖缆将读取文件 我正在用c#编码。这是迄今为止我的(部分)代码:C# 在XAML中将行详细信息添加到DataGrid,c#,xaml,datagrid,datatemplate,rowdetails,C#,Xaml,Datagrid,Datatemplate,Rowdetails,我制作了一个wpf数据网格,它从文件名及其分数列表中调用。 网格工作得很好,现在我尝试让用户可以点击一行,它显示文件内容本身(文本文件)。 文本字符串非常大,因此我不希望它成为列表的属性。相反,我希望文件路径成为属性,每当我单击一行时,拖缆将读取文件 我正在用c#编码。这是迄今为止我的(部分)代码: public class DataLeakageScorer { public string fileName { get; set; } public string score {
public class DataLeakageScorer
{
public string fileName { get; set; }
public string score { get; set; }
public string path { get; set; }
public DataLeakageScorer(string fileName, string score, string path)
{
this.fileName = fileName;
this.score = score;
this.path = path;
}
}
还有我的XAML:
<Grid>
<Button x:Name="button" Content="Browse" HorizontalAlignment="Left" Margin="464,22,0,0" VerticalAlignment="Top" Width="75" Click="browse"/>
<Label x:Name="status" Content="Please select a folder" FontSize="15" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" Margin="0,5,121,0" VerticalAlignment="Top" Width="459" Height="52"/>
<DataGrid Name="scoresTable" AutoGenerateColumns="False" IsReadOnly="True" CanUserSortColumns="False" Margin="0,62,0,0">
<DataGrid.Columns>
<DataGridTextColumn Header="File Name" Binding="{Binding fileName}"/>
<DataGridTextColumn Header="Score" Binding="{Binding score}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
谢谢你,如果我不够清楚的话,我很抱歉。你需要的是博客上的行详细信息吗?首先,您必须创建一个附加到DataGrid的自定义行为。让我们称之为ReadFileBehavior
它应该在将自身附加到数据网格时订阅RowDetailsVisibilityChanged事件
public class ReadFileBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.RowDetailsVisibilityChanged += OnRowDetailsVisibilityChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.RowDetailsVisibilityChanged -= OnRowDetailsVisibilityChanged;
}
private void OnRowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
var element = e.DetailsElement as TextBlock;
element.Text = File.ReadAllLines((element.DataContext as DataLeakageScorer).Path);
}
}
我已经看到了这一点,不幸的是,这并不是我问题的答案。从我的理解来看,这些图片是客户的属性,正如我所说的-我不希望我的字符串是这样。我已经编辑了答案。这只是你如何解决问题的草图。:)希望这会有帮助!
<DataGrid ItemsSource="{Binding Customers}">
<Interactivity:Interaction.Behaviors>
<customBehaviors:ReadFileBehavior />
</Interactivity:Interaction.Behaviors>
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
private void OnRowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
var context = e.DetailsElement.DataContext as DataLeakageScorer
context.Score = File.ReadAllLines(context.Path);
}