数据绑定没有';不工作XAML C#WPF

数据绑定没有';不工作XAML C#WPF,c#,.net,wpf,xaml,data-binding,C#,.net,Wpf,Xaml,Data Binding,我有一个WPF表单,希望将反序列化的json数据绑定到UI上的datagrid。但在这里,我无法在UI上看到数据网格中的值 JSON response: Firstly, my json response is in the below format: { "results": [ {"type": "upload", "status": "new","data": {"uuid":"f7e98"},"device_id": "123"},

我有一个WPF表单,希望将反序列化的json数据绑定到UI上的datagrid。但在这里,我无法在UI上看到数据网格中的值

JSON response:
Firstly, my json response is in the below format:
{
    "results":
        [
           {"type": "upload", "status": "new","data": {"uuid":"f7e98"},"device_id": "123"},
           {"type": "upload", "status": "new","data": {"uuid":"f8fc1"},"device_id": "456"}, 
           {"type": "upload", "status": "new","data": {"uuid":"fgff1"},"device_id": "678"},
           {"type": "upload", "status": "new","data": {"uuid":"yuki1"},"device_id": "786"},
           {"type": "upload", "status": "new","data": {"uuid":"rtyi1"},"device_id": "654"}
        ]
}
课程:

public class UploadStatusList
{
    public List<UploadStatus> results;
}
public class UploadStatus
{
    public string type {get;set;}
    public string status {get;set;}
    public string device_id {get;set;}
    public Data data {get;set;}
}
public class Data
{
    public string uuid {get;set;}
}
public partial class MainWindow : Window
{
    // Dependency Property
    public static readonly DependencyProperty actionListProperty =
        DependencyProperty.Register("actionList", typeof(ObservableCollection<UploadStatusList>),
            typeof(MainWindow), new FrameworkPropertyMetadata(null));

    // .NET Property wrapper
    public ObservableCollection<UploadStatusList> actionList
    {
        get { return (ObservableCollection<UploadStatusList>)GetValue(actionListProperty); }
        set { SetValue(actionListProperty, value); }
    }


    public MainWindow()
    {
        InitializeComponent();
        //Code Block for httpwebRequest here
        //JSON Response String 
        string json = stringbuilder.ToString();

        //Newtonsoft.Json.JsonConvert.Deserialize<UploadStatusList>(json) returns null for me here,so using Javascript serializer. No idea why !? 
        UploadStatusList list = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<UploadStatusList>(json);
        foreach (var item in list.results)
        {
            Debug.Print("id: {0}, name: {1}", item.status, item.device_id);
        }
    }
}    
<TabItem x:Name="UploadList" Header="Upload List" HorizontalAlignment="Left" Width="77" Margin="-2,-2,0,2">
                <Grid Margin="0,0,0,0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="124*"/>
                        <ColumnDefinition Width="107*"/>
                    </Grid.ColumnDefinitions>


                    <Button x:Name="Button" Content="Refresh" Margin="14,40,0,361" HorizontalAlignment="Left" Width="120" Click="Button_Click"/>

                    <DataGrid Margin="14,79,10,58" x:Name="Access_DataGrid" IsReadOnly="True" ItemsSource="{Binding actionList.results}" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False">
          <DataGrid.Columns>
              <DataGridTextColumn Header="status" Binding="{Binding status}" />
              <DataGridTextColumn Header="device id" Binding="{Binding device_id}" />
              <DataGridTextColumn Header="type" Binding="{Binding type}" />
           </DataGrid.Columns>

                    </DataGrid>
                </Grid>
            </TabItem>
公共类上传状态列表
{
公开名单结果;
}
公共类上载状态
{
公共字符串类型{get;set;}
公共字符串状态{get;set;}
公共字符串设备\u id{get;set;}
公共数据数据{get;set;}
}
公共类数据
{
公共字符串uuid{get;set;}
}
这是我的主窗口。xaml.cs
MainWindow.xaml.cs:

public class UploadStatusList
{
    public List<UploadStatus> results;
}
public class UploadStatus
{
    public string type {get;set;}
    public string status {get;set;}
    public string device_id {get;set;}
    public Data data {get;set;}
}
public class Data
{
    public string uuid {get;set;}
}
public partial class MainWindow : Window
{
    // Dependency Property
    public static readonly DependencyProperty actionListProperty =
        DependencyProperty.Register("actionList", typeof(ObservableCollection<UploadStatusList>),
            typeof(MainWindow), new FrameworkPropertyMetadata(null));

    // .NET Property wrapper
    public ObservableCollection<UploadStatusList> actionList
    {
        get { return (ObservableCollection<UploadStatusList>)GetValue(actionListProperty); }
        set { SetValue(actionListProperty, value); }
    }


    public MainWindow()
    {
        InitializeComponent();
        //Code Block for httpwebRequest here
        //JSON Response String 
        string json = stringbuilder.ToString();

        //Newtonsoft.Json.JsonConvert.Deserialize<UploadStatusList>(json) returns null for me here,so using Javascript serializer. No idea why !? 
        UploadStatusList list = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<UploadStatusList>(json);
        foreach (var item in list.results)
        {
            Debug.Print("id: {0}, name: {1}", item.status, item.device_id);
        }
    }
}    
<TabItem x:Name="UploadList" Header="Upload List" HorizontalAlignment="Left" Width="77" Margin="-2,-2,0,2">
                <Grid Margin="0,0,0,0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="124*"/>
                        <ColumnDefinition Width="107*"/>
                    </Grid.ColumnDefinitions>


                    <Button x:Name="Button" Content="Refresh" Margin="14,40,0,361" HorizontalAlignment="Left" Width="120" Click="Button_Click"/>

                    <DataGrid Margin="14,79,10,58" x:Name="Access_DataGrid" IsReadOnly="True" ItemsSource="{Binding actionList.results}" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False">
          <DataGrid.Columns>
              <DataGridTextColumn Header="status" Binding="{Binding status}" />
              <DataGridTextColumn Header="device id" Binding="{Binding device_id}" />
              <DataGridTextColumn Header="type" Binding="{Binding type}" />
           </DataGrid.Columns>

                    </DataGrid>
                </Grid>
            </TabItem>
公共部分类主窗口:窗口
{
//依赖属性
公共静态只读DependencyProperty actionListProperty=
DependencyProperty.Register(“actionList”,类型为(ObservableCollection),
typeof(主窗口),new FrameworkPropertyMetadata(null));
//.NET属性包装器
公共可观察收集操作列表
{
get{return(ObservableCollection)GetValue(actionListProperty);}
set{SetValue(actionListProperty,value);}
}
公共主窗口()
{
初始化组件();
//此处为httpwebRequest的代码块
//JSON响应字符串
string json=stringbuilder.ToString();
//在这里,Newtonsoft.Json.JsonConvert.Deserialize(Json)为我返回null,所以使用Javascript序列化程序。不知道为什么!?
UploadStatusList=new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize(json);
foreach(list.results中的var项)
{
打印(“id:{0},名称:{1}”,item.status,item.device_id);
}
}
}    
下面是我的主窗口。XAML。。。我是xaml新手,所以不确定是否遗漏了什么 MainWindow.xaml:

public class UploadStatusList
{
    public List<UploadStatus> results;
}
public class UploadStatus
{
    public string type {get;set;}
    public string status {get;set;}
    public string device_id {get;set;}
    public Data data {get;set;}
}
public class Data
{
    public string uuid {get;set;}
}
public partial class MainWindow : Window
{
    // Dependency Property
    public static readonly DependencyProperty actionListProperty =
        DependencyProperty.Register("actionList", typeof(ObservableCollection<UploadStatusList>),
            typeof(MainWindow), new FrameworkPropertyMetadata(null));

    // .NET Property wrapper
    public ObservableCollection<UploadStatusList> actionList
    {
        get { return (ObservableCollection<UploadStatusList>)GetValue(actionListProperty); }
        set { SetValue(actionListProperty, value); }
    }


    public MainWindow()
    {
        InitializeComponent();
        //Code Block for httpwebRequest here
        //JSON Response String 
        string json = stringbuilder.ToString();

        //Newtonsoft.Json.JsonConvert.Deserialize<UploadStatusList>(json) returns null for me here,so using Javascript serializer. No idea why !? 
        UploadStatusList list = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<UploadStatusList>(json);
        foreach (var item in list.results)
        {
            Debug.Print("id: {0}, name: {1}", item.status, item.device_id);
        }
    }
}    
<TabItem x:Name="UploadList" Header="Upload List" HorizontalAlignment="Left" Width="77" Margin="-2,-2,0,2">
                <Grid Margin="0,0,0,0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="124*"/>
                        <ColumnDefinition Width="107*"/>
                    </Grid.ColumnDefinitions>


                    <Button x:Name="Button" Content="Refresh" Margin="14,40,0,361" HorizontalAlignment="Left" Width="120" Click="Button_Click"/>

                    <DataGrid Margin="14,79,10,58" x:Name="Access_DataGrid" IsReadOnly="True" ItemsSource="{Binding actionList.results}" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False">
          <DataGrid.Columns>
              <DataGridTextColumn Header="status" Binding="{Binding status}" />
              <DataGridTextColumn Header="device id" Binding="{Binding device_id}" />
              <DataGridTextColumn Header="type" Binding="{Binding type}" />
           </DataGrid.Columns>

                    </DataGrid>
                </Grid>
            </TabItem>

您做得很好,但只需在ItemSource的绑定中添加ElemmentName或使用DataContext即可

   <Window x:Name="mainWindow".....>
       <... ItemsSource="{Binding actionList.results, ElementName=mainWindow}".....


在代码隐藏中,您忘记了操作列表。添加(列表)
。抱歉,我删除了您的评论。您使用列表(
actionList
)。您在
操作列表中有一些对象,或者只有一个(在
主窗口构造函数中创建)。如果一个对象只需要将类型actionList更改为
public UploadStatusList actionList…
并在code
actionList=list
中。您从未设置DP
actionList
。此外,如果不从任何地方绑定,则无需创建DP。请参阅以下链接以更好地了解绑定: