将导入的文件绑定到ListView
Binding imported files to ListView
我正在尝试将我的 class 的列表绑定到 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;
}
尝试绑定时:
ListGrid l = new ListGrid(); // My Class
l.IconUri = imagemp3.Source;
l.Title = Ftitle;
l.Length = duration;
l.Album = Falbum;
l.Composer = Fcomposer;
l.Path = openFileDialog1.FileName;
MyMP3LIST.Add(l);
我的XAML:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding MyMP3LIST}"
Margin="-3,-0.877,-4,-15.925" SelectionChanged="ListM_SelectionChanged">
只有第一个导入的文件显示在ListView
。
填充后 MyMP3LIST
更改:
ListM.DataContext = MyMP3LIST;
为此:
this.DataContext = MyMP3LIST;
还要更改此:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding MyMP3LIST}" ../>
为此:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding}" .../>
同样在您的 ListView
中,您需要 ItemTemplate
来显示数据。例如:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding}" ...>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Title}" />
<TextBlock Text="{Binding Album}" />
...
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView>
编辑: 根据你的评论,你说你想添加带有 OpenFileDialog
的项目并且你想更新你的 ListView
,MyMP3LIST
应该是 ObservableCollection
:
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>
项目模板可以使用您喜欢的任何类型的 WPF 控件来定义您的属性。
我正在尝试将我的 class 的列表绑定到 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;
}
尝试绑定时:
ListGrid l = new ListGrid(); // My Class
l.IconUri = imagemp3.Source;
l.Title = Ftitle;
l.Length = duration;
l.Album = Falbum;
l.Composer = Fcomposer;
l.Path = openFileDialog1.FileName;
MyMP3LIST.Add(l);
我的XAML:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding MyMP3LIST}"
Margin="-3,-0.877,-4,-15.925" SelectionChanged="ListM_SelectionChanged">
只有第一个导入的文件显示在ListView
。
填充后 MyMP3LIST
更改:
ListM.DataContext = MyMP3LIST;
为此:
this.DataContext = MyMP3LIST;
还要更改此:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding MyMP3LIST}" ../>
为此:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding}" .../>
同样在您的 ListView
中,您需要 ItemTemplate
来显示数据。例如:
<ListView x:Name="ListM" Width="Auto" ItemsSource="{Binding}" ...>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Title}" />
<TextBlock Text="{Binding Album}" />
...
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView>
编辑: 根据你的评论,你说你想添加带有 OpenFileDialog
的项目并且你想更新你的 ListView
,MyMP3LIST
应该是 ObservableCollection
:
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>
项目模板可以使用您喜欢的任何类型的 WPF 控件来定义您的属性。