c# - Wpf 递归绑定(bind)

标签 c# wpf xaml recursion

我试图弄清楚如何在 xaml 中构建递归绑定(bind)。我了解 HierarchialDataTemplate,但这不是我想要的,因为我的数据源不是项目的集合。具体来说,我正在构建一个异常浏览器,并试图找出表达异常的 InnerException 字段的最佳方式(这当然是另一个异常,因此是递归。)

这个异常浏览器是我正在构建的日志查看器的一部分。这是到目前为止 ListView 的 XAML:

<ListView x:Name="LogViewerOutput">
    <ListView.ItemTemplate>
        <DataTemplate DataType="Ushanka.Log.LogMessageEventArgs">
            <Expander Style="{StaticResource ExceptionTreeStyle}" Width="Auto">
                <Expander.Header>
                    <StackPanel Orientation="Horizontal">
                        <Image Stretch="Fill" Width="16" Height="16" Margin="5" 
                               Source="{Binding Path=Level, Converter={StaticResource LogLevelIconConverter}}" />
                        <TextBlock Text="{Binding Message}" />
                    </StackPanel>
                </Expander.Header>
                <Expander.Content>
                    <StackPanel Orientation="Vertical">
                        <TextBlock Text="{Binding Exception.Message}" />
                        <TextBlock Text="{Binding Exception.Source" />
                        <!-- Here I would like to somehow be able to recursively browse through the tree of InnerException -->
                    </StackPanel>
                </Expander.Content>
            </Expander>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

有什么想法吗?这可能吗?

最佳答案

我将为异常创建一个 DataTemplate 并将 InnerException 绑定(bind)到其中的 ContentPresenter。当 InnerExpception 为 null 时,ContentPresenter 将停止链,并且您可以根据需要格式化异常。像这样的事情:

<DataTemplate DataType="{x:Type Exception}">
    <StackPanel Orientation="Vertical">
        <TextBlock Text="{Binding Message}" />
        <TextBlock Text="{Binding Source"   />
        <ContentPresenter Content="{Binding InnerException}"    />
    </StackPanel>
</DataTemplate>

关于c# - Wpf 递归绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1721216/

相关文章:

c# - WPF - 无法在 WebBrowser 控件中从本地计算机打开文件

c# - 为控件快捷方式创建事件方法 - Visual Studio

wpf - 鼠标悬停时更改按钮的颜色

c# - EF6 : ObjectContext. ExecuteStoreQuery 返回空列表

c# - 为什么在 Excel 中比较 1<' 或将任何数字与带有 < 的任何文本进行比较结果为真?

c# - 图像未显示在WPF应用程序中?

c# - 带有所有者的 MVVM showDialog 并在后台工作人员完成时关闭

WPF 单选按钮 IsChecked 不起作用

c# - XAML,在带有动画的按钮内移动两个内容控件

c# - MahApps DataGridCell 样式