C# 添加项目时不显示WPF Listview

C# 添加项目时不显示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}"> <

我试图在WPF中将项目动态添加到listview中,但我不知道为什么会显示任何项目。虽然这是一个复习问题,所以我尝试使用一些可观察的收集,但没有效果。 我在两个文本组中获取信息,并希望在单击按钮时在列表视图中显示这些信息

你能帮我理解这个问题吗

我的WPF与listview

<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=thisAjoutRecette
    的构造函数中,应避免在特定元素上显式设置
    DataContext
    。最好在顶级元素上设置它,例如
    窗口
    用户控件
    ,以利用
    数据内容
    继承。因此,它应该是
    this.DataContext=this。通过这种方式,您也不需要仅为了初始化而命名控件。这是@BionicCode的一个好观点。接下来,马蒂厄,请考虑查看MVVM模式并绑定到VIEW模型类,而不是后面的代码。它将很好地将视图层与视图模型(绑定到的对象)解耦,并使解决方案在将来更易于维护。快乐编码!:)
    
    public AjoutRecette()
    {
        InitializeComponent();
        listview.DataContext = this;
    }