C# 将导入的文件绑定到ListView

C# 将导入的文件绑定到ListView,c#,wpf,listview,bind,C#,Wpf,Listview,Bind,我正在尝试将类的列表绑定到ListView中。我试过很多问题。 这是我的c代码,显示了我如何定义: public MainWindow() { InitializeComponent(); timer.Interval = TimeSpan.FromSeconds(1); // L’intervalle entre chaque tick du timer sera d’une seconde timer.Tick += new EventHandler(timer

我正在尝试将类的列表绑定到ListView中。我试过很多问题。 这是我的c代码,显示了我如何定义:

public MainWindow()
{
     InitializeComponent();
     timer.Interval = TimeSpan.FromSeconds(1); // L’intervalle entre chaque tick du timer sera d’une seconde
     timer.Tick += new EventHandler(timer_Tick); // A chaque tick, on déclenche l’évènement timer_Tick
     MyMP3LIST = new List<ListGrid>();
     ListM.DataContext = MyMP3LIST; // ListM = ListView name
     // I've tried : ListM.ItemSource = MyMP3LIST;
}
我的XAML:

仅将第一个导入的文件显示在列表视图中。

填充MyMP3LIST后,更改以下内容:

ListM.DataContext = MyMP3LIST;
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding MyMP3LIST}" ../>
为此:

this.DataContext = MyMP3LIST;
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding}" .../>
并改变这一点:

ListM.DataContext = MyMP3LIST;
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding MyMP3LIST}" ../>
编辑:根据您的评论,您说您想用OpenFileDialog添加项目,并且您想更新ListView,MyMP3LIST应该是ObservableCollection:


很抱歉重复回答,但注释不允许使用代码。 这只是一个示例,所以我不确定是否所有属性都是精确的,但它应该是这样的:

        <ListView Grid.Row="0" Grid.Column="0" ItemsSource="{Binding Path=YourCollection, Mode=OneWay}"
              SelectedItem="{Binding Path=YourSelectedItem, Mode=TwoWay}"
             Margin="0" 
               >
        <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <WrapPanel>
                            <TextBlock Text="{Binding Path=FieldName1}"  />
                            <TextBlock Text="{Binding Path=FieldName2}" />
                        </WrapPanel>
                        <WrapPanel>
                            <TextBlock Text="{Binding Path=FieldName3}"  />
                            <TextBlock Text="{Binding Path=FieldName4}" />
                        </WrapPanel>
                    </StackPanel>
                </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

可以使用任何类型的WPF控件为属性定义项模板。

我不知道问题是否是由于您的集合造成的,请确保使用ObservableCollection,并确保您的元素类实现INotifyPropertyChanged接口。如果元素没有出现,您可能需要为列表视图定义项目模板。现在可以了,我只看到一个项目。。导入时,我看不到第二项it@JimmyJames...You是否意味着在按钮单击事件中添加项目?在更改源之后,一旦将ListView的ItemsSource设置为MyMP3LIST,ListView就不会更新。如果您想在添加项目后查看更新的ListView,您应该使用ObservableCollection。我的意思是使用openfiledialog添加项目,我可以选择我的音乐,然后在ListView@JimmyJames...MyMP3LIST应为ObservableCollection MyMP3LIST=新ObservableCollection;很好!我使用ListM.DataContext=MyMP3LIST;而不是this.DataContext=MyMP3LIST;我已经声明publicobservablecollection MyMP3LIST=newobbservablecollection;。。。谢谢你,先生!
ObservableCollection<ListGrid> MyMP3LIST = new ObservableCollection<ListGrid>();
        <ListView Grid.Row="0" Grid.Column="0" ItemsSource="{Binding Path=YourCollection, Mode=OneWay}"
              SelectedItem="{Binding Path=YourSelectedItem, Mode=TwoWay}"
             Margin="0" 
               >
        <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <WrapPanel>
                            <TextBlock Text="{Binding Path=FieldName1}"  />
                            <TextBlock Text="{Binding Path=FieldName2}" />
                        </WrapPanel>
                        <WrapPanel>
                            <TextBlock Text="{Binding Path=FieldName3}"  />
                            <TextBlock Text="{Binding Path=FieldName4}" />
                        </WrapPanel>
                    </StackPanel>
                </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>