Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中将数据从DataContext传递到ListBox?_C#_Wpf_Xaml - Fatal编程技术网

C# 如何在WPF中将数据从DataContext传递到ListBox?

C# 如何在WPF中将数据从DataContext传递到ListBox?,c#,wpf,xaml,C#,Wpf,Xaml,我有一个类定义如下: public class Agent { public int Id { get; set; } public string Category { get; set; } // rest removed for brevity } 然后,在WPF中,我以List的形式获取数据,并将其传递给DataContext,如下所示: List<Agent> agents; // this includes my data this.Dat

我有一个类定义如下:

public class Agent 
{
    public int Id { get; set; }

    public string Category { get; set; }

    // rest removed for brevity 
}
然后,在WPF中,我以
List
的形式获取数据,并将其传递给
DataContext
,如下所示:

List<Agent> agents; // this includes my data
this.DataContext = agents;

但这似乎并不正确。有什么想法吗?

我还建议您使用MVVM。但是如果你不想那么试试这个

XAML:


政务司司长:

public主窗口()
{
初始化组件();
列表代理=新列表
{
新代理人
{
Category=“Category”
}
};
DataContext=代理;
}
公共类代理
{
公共字符串类别
{
得到;
设置
}
}

我还建议您使用MVVM。但是如果你不想那么试试这个

XAML:


政务司司长:

public主窗口()
{
初始化组件();
列表代理=新列表
{
新代理人
{
Category=“Category”
}
};
DataContext=代理;
}
公共类代理
{
公共字符串类别
{
得到;
设置
}
}

通常,DataContext将是一个视图模型类,它将包含代理列表;然后可以将ItemsSource绑定到该列表。涉及listbox的许多示例中的任何一个都将非常直接。如果列表本身是DataContext,则不确定绑定应该是什么样子

然后,一旦ItemsSource设置为代理列表,如果要在列表中显示类别,更简单的方法是将DisplayMemberPath设置为“Category”


我建议研究MVVM并学习如何应用它,在我看来这是一个非常宝贵的概念。

通常,DataContext将是一个视图模型类,它将包含代理列表;然后可以将ItemsSource绑定到该列表。涉及listbox的许多示例中的任何一个都将非常直接。如果列表本身是DataContext,则不确定绑定应该是什么样子

然后,一旦ItemsSource设置为代理列表,如果要在列表中显示类别,更简单的方法是将DisplayMemberPath设置为“Category”


我建议研究MVVM并学习如何应用它,在我看来,这是一个非常宝贵的概念。

您尝试将列表框绑定到字符串属性

您可以尝试以下方法: 为exemle myUC的用户控件命名 将属性添加到用户控件:

 public List<Agent> AgentList { get; set; };
并按如下方式绑定列表框:

<ListBox
Name="agentCategoryListBox"
Grid.Row="2"
Grid.Column="1"
ItemSource="{Binding Path=AgentList, ElementName=myUC"} />

您尝试将列表框绑定到字符串属性

您可以尝试以下方法: 为exemle myUC的用户控件命名 将属性添加到用户控件:

 public List<Agent> AgentList { get; set; };
并按如下方式绑定列表框:

<ListBox
Name="agentCategoryListBox"
Grid.Row="2"
Grid.Column="1"
ItemSource="{Binding Path=AgentList, ElementName=myUC"} />

也许这会给你一个想法:


也许这会给你一个想法:


让我按照亚历克斯建议的正确方式来帮助你

创建一个列表并在ViewModel中填充它,如下所示

视图模型

public类MainWindowViewModel:INotifyPropertyChanged
{
公共主窗口视图模型()
{
代理=新的可观察集合();
LoadData();
} 
私有void LoadData()
{            
Add(新代理{Id=1,Category=“a”});
Add(新代理{Id=2,Category=“b”});
Add(新代理{Id=3,Category=“c”});
}
}
在XAML中,列出并使用如下数据模板:

<ListBox
    Name="agentCategoryListBox"
    Grid.Row="2"
    Grid.Column="1"
    ItemSource="{Binding Path=Category"} />
    <Window.Resources>
        <DataTemplate x:Key="AItemTemplate">
            <TextBlock Text="{Binding Category}"></TextBlock>
        </DataTemplate>
    </Window.Resources>

<ListBox ItemsSource="{Binding agents}" 
         ItemTemplate="{StaticResource AItemTemplate}"></ListBox>


就这样

让我按照亚历克斯建议的正确方式来帮助你

创建一个列表并在ViewModel中填充它,如下所示

视图模型

public类MainWindowViewModel:INotifyPropertyChanged
{
公共主窗口视图模型()
{
代理=新的可观察集合();
LoadData();
} 
私有void LoadData()
{            
Add(新代理{Id=1,Category=“a”});
Add(新代理{Id=2,Category=“b”});
Add(新代理{Id=3,Category=“c”});
}
}
在XAML中,列出并使用如下数据模板:

<ListBox
    Name="agentCategoryListBox"
    Grid.Row="2"
    Grid.Column="1"
    ItemSource="{Binding Path=Category"} />
    <Window.Resources>
        <DataTemplate x:Key="AItemTemplate">
            <TextBlock Text="{Binding Category}"></TextBlock>
        </DataTemplate>
    </Window.Resources>

<ListBox ItemsSource="{Binding agents}" 
         ItemTemplate="{StaticResource AItemTemplate}"></ListBox>


就这样

获得你想要的东西的最快方法是:

<ListBox
    Name="agentCategoryListBox"
    Grid.Row="2"
    DisplayMemberPath="Category"
    Grid.Column="1"
    ItemSource="{Binding Path=."} />
把这些东西都捆起来

<ListBox
    Name="agentCategoryListBox"
    Grid.Row="2"
    DisplayMemberPath="Category"
    Grid.Column="1"
    ItemSource="{Binding Path=Agents"} />

获得所需的最快方法是:

<ListBox
    Name="agentCategoryListBox"
    Grid.Row="2"
    DisplayMemberPath="Category"
    Grid.Column="1"
    ItemSource="{Binding Path=."} />
把这些东西都捆起来

<ListBox
    Name="agentCategoryListBox"
    Grid.Row="2"
    DisplayMemberPath="Category"
    Grid.Column="1"
    ItemSource="{Binding Path=Agents"} />


你在使用什么orm?你在使用什么orm?我认为这是不必要的复杂,并且会偏离“正确”的方式,即MVVM,这对我今后的工作更有帮助。在我看来:)我认为这是不必要的复杂,并分散了对“正确”方式的注意力,即MVVM,这将对我的未来更有帮助。在我看来:)