// Respectfully adapted from https://stackoverflow.com/questions/502250/bind-to-a-method-in-wpf/844946#844946
public sealed class MethodToValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var methodName = parameter as string;
if (value == null || methodName == null)
return null;
var methodInfo = value.GetType().GetMethod(methodName, new Type[0]);
if (methodInfo == null)
return null;
return methodInfo.Invoke(value, new object[0]);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException(GetType().Name + " can only be used for one way conversion.");
}
}
var token = JToken.Parse(jsonString);
var children = new List<JToken>();
if (token != null)
{
children.Add(token);
}
treeView1.ItemsSource = null;
treeView1.Items.Clear();
treeView1.ItemsSource = children;
3条答案
按热度按时间bd1hkmkf1#
您可以使用Json.NET框架完成此操作。Json.NET有一个静态方法
JToken.Parse()
(其用途类似于XDocument.Parse()
),并可以将有效的JSON字符串转换为Newtonsoft.Json.Linq.JToken
对象的层次结构。可以使用DataTemplate
和HierarchicalDataTemplate
将此层次结构绑定到WPF TreeView控件中,以格式化来自JToken
的所有可能子类的数据并进行迭代他们的孩子。需要模板的具体Json.NET
JToken
类包括:JValue
JObject
JArray
JProperty
JConstructor
JRaw
为了将这些类的层次结构绑定到树中,首先需要一个转换器将
JToken.Children()
方法转换为属性:这样做之后,可以在树中显示此层次结构的一个极其简单的XAML标记是:
然后,当用户选择查看JSON数据时,您可以执行以下操作:
结果如下所示:
对于sample JSON:
当然,用户界面可以做得更漂亮,例如,将
JProperty
标记的值与仅一个JValue
子标记放在同一行,但是,这应该会给予您了解如何进行绑定。这种方法将JSON直接绑定到树,如果您希望获得完整的编辑功能,包括添加、删除和重命名节点,您可能希望切换到"Model-View-ViewModel" methodology,其中
JToken
层次结构成为模型,轻量级视图模型处理修改和通知。g2ieeal72#
基于dbc的上述回答,我继续创建了一个WPFJSONViewer用户控件,它应该可以轻松地集成到任何WPF项目中
https://bitbucket.org/rasmuszimmer/wpf-jsonviewer-usercontrol
该项目是一个演示其使用的wpf解决方案。
你想怎么做就怎么做!
yptwkmov3#
您可以简单地安装nuGet包JSONTreeView并调用函数:
这将是结果: