C# 添加项目时不显示WPF Listview
我试图在WPF中将项目动态添加到listview中,但我不知道为什么会显示任何项目。虽然这是一个复习问题,所以我尝试使用一些可观察的收集,但没有效果。 我在两个文本组中获取信息,并希望在单击按钮时在列表视图中显示这些信息 你能帮我理解这个问题吗 我的WPF与listviewC# 添加项目时不显示WPF Listview,c#,wpf,listview,C#,Wpf,Listview,我试图在WPF中将项目动态添加到listview中,但我不知道为什么会显示任何项目。虽然这是一个复习问题,所以我尝试使用一些可观察的收集,但没有效果。 我在两个文本组中获取信息,并希望在单击按钮时在列表视图中显示这些信息 你能帮我理解这个问题吗 我的WPF与listview <ListView Name="listview" Margin="0 10 0 0" Height="150" ItemsSource="{Binding Recette}"> <
<ListView Name="listview" Margin="0 10 0 0" Height="150" ItemsSource="{Binding Recette}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding nomP}" Header="Nom" Width="250"/>
<GridViewColumn DisplayMemberBinding="{Binding quantP}" Header="Quantité" Width="100"/>
</GridView>
</ListView.View>
</ListView>
My.cs:
public List<Produits> Recette { get; set; }
public AjoutRecette()
{
InitializeComponent();
}
private void btnAjoutProd_Click(object sender, RoutedEventArgs e)
{
string nomP = combobProd.Text;
int quantP = int.Parse(txtbQuantité.Text);
Produits prod = new Produits(nomP, quantP);
Recette.Add(prod);
}
public List Recette{get;set;}
公共场所
{
初始化组件();
}
私有无效btnAjoutProd\u单击(对象发送者,路由目标e)
{
字符串nomP=combobProd.Text;
int quantP=int.Parse(txtbQuantité.Text);
产品产品=新产品(nomP、quantP);
Recette.Add(prod);
}
以下是我已经尝试过的ObersvableCollection:
public ObservableCollection<Produits> Recette { get; set; }
public AjoutRecette()
{
InitializeComponent();
}
private void btnAjoutProd_Click(object sender, RoutedEventArgs e)
{
Recette = new ObservableCollection<Produits>();
string nomP = combobProd.Text;
int quantP = int.Parse(txtbQuantité.Text);
Produits prod = new Produits(nomP, quantP);
Recette.Add(prod);
}
publicobservableCollection Recette{get;set;}
公共场所
{
初始化组件();
}
私有无效btnAjoutProd\u单击(对象发送者,路由目标e)
{
Recette=新的可观察集合();
字符串nomP=combobProd.Text;
int quantP=int.Parse(txtbQuantité.Text);
产品产品=新产品(nomP、quantP);
Recette.Add(prod);
}
非常感谢 要使其正常工作,请检查以下几点:
Recette
更改为observedcollection
类型,而不是List
。您需要调整属性类型以及实例化集合的代码部分。
您可以简单地执行以下操作:
public ObservableCollection<Produits> Recette { get; set; } = new ObservableCollection<Produits>();
nomP
和quantP
存在于Produits
类中祝你好运 将
Recette
更改为observateCollection
。您好,感谢您的帮助,但它仍然不能工作,即使使用前面提到的“public observateCollection Recette{get;set;}”,也没有任何事情发生。请使用observateCollection
。还要确保ListView
具有正确的DatContext
,否则绑定将无法解析代码>在初始化组件()
clall之后。您好,非常感谢您的清晰回答!我只是再次尝试用这种方法实例化集合,但仅此而已。我没有真正得到“grid.DataContext=this”,我应该在哪里设置它?nomP和quantP都在课堂上。嗨@Matthieu。实际上,我们应该能够在不考虑父元素的情况下使其工作。请尝试调用:listview.DataContext=this在AjoutRecette
的构造函数中,应避免在特定元素上显式设置DataContext
。最好在顶级元素上设置它,例如窗口
或用户控件
,以利用数据内容
继承。因此,它应该是this.DataContext=this构造函数中的代码>。通过这种方式,您也不需要仅为了初始化而命名控件。这是@BionicCode的一个好观点。接下来,马蒂厄,请考虑查看MVVM模式并绑定到VIEW模型类,而不是后面的代码。它将很好地将视图层与视图模型(绑定到的对象)解耦,并使解决方案在将来更易于维护。快乐编码!:)
public AjoutRecette()
{
InitializeComponent();
listview.DataContext = this;
}