-2

私はWPFが初めてで、バインディングに問題があり、さまざまな解決策を探していましたが、何も役に立ちませんでした. 2 つの監視可能なコレクションを取得しました。リストビューの異なる列にバインドしたいと考えています。XAML コード:

<GroupBox Header="Search results" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="727" Width="739" FontFamily="Malgun Gothic" FontSize="24">
        <ListView x:Name="ListView1"  HorizontalAlignment="Left" Width="729" FontFamily="Malgun Gothic" FontSize="24" Background="{x:Null}" Margin="0,0,-2,0" ItemsSource="{Binding ElementName=Search, Path=Library}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Song name" DisplayMemberBinding="{Binding Track}" Width="550"/>
                    <GridViewColumn Header="Artist" DisplayMemberBinding="{Binding Artist}" Width="170"/>
                </GridView>
            </ListView.View>
            <ListView.DataContext>
                <Classes:Library/>
            </ListView.DataContext>
            <Classes:Library Text=""/>
        </ListView>
    </GroupBox>

xaml.cs から

    Library CallSearch = new Library();
    Playlist Songs = new Playlist();
    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
            CallSearch.Text = textSearch.Text;
            CallSearch.Search();
    }

クラスから:

    private ObservableCollection<string> track = new ObservableCollection<string>();
    private ObservableCollection<string> artist = new ObservableCollection<string>();
    public ObservableCollection<string> Track
    {
        get { return track; }
        set { track = value; }
    }
    public ObservableCollection<string> Artist
    {
        get { return artist; }
        set { artist = value; }
    }

公共空間の内部:

            foreach (DirectoryInfo diNext in dirs)
            {
                foreach (FileInfo test in diNext.GetFileSystemInfos("*"+tb+"*"+".mp3", SearchOption.AllDirectories))
                {
                    u.Read(test.FullName);
                    Track.Add(u.Title);
                    Artist.Add(u.Artist);
                }
            }

私は何が欠けていますか?

NIT の更新: System.Windows.Data エラー: 40: BindingExpression パス エラー: 'Albums' プロパティが 'object' ''Library' (HashCode=36404074)' に見つかりません。BindingExpression:Path=アルバム; DataItem='Library' (HashCode=36404074); ターゲット要素は 'ListView' (Name='ListView1') です。ターゲット プロパティは 'ItemsSource' (タイプ 'IEnumerable') です System.Windows.Data エラー: 40: BindingExpression パス エラー: 'オブジェクト' ''ライブラリ' (HashCode=40706798)' で 'Track' プロパティが見つかりません。BindingExpression:Path=トラック; DataItem='Library' (HashCode=40706798); ターゲット要素は 'TextBlock' (Name='') です。ターゲット プロパティは 'Text' (タイプ 'String') System.Windows.Data エラー: 40: BindingExpression パス エラー: 'Artist' 「オブジェクト」「ライブラリ」(HashCode=40706798)」にプロパティが見つかりません。BindingExpression: パス = アーティスト; DataItem='Library' (HashCode=40706798); ターゲット要素は 'TextBlock' (Name='') です。ターゲット プロパティは 'Text' (タイプ 'String') です

4

1 に答える 1

1

2 つのばらばらのコレクションを持つ代わりに、2 つのプロパティを含むモデル クラスを作成します。

public class Album
{
 public string Track{get;set;}
 public string Artist{get;set;}
}

このクラスの ObservableCollection を作成します

public ObservableCollection<Album> Albums{get;set;}

foreach (DirectoryInfo diNext in dirs)
{
      foreach (FileInfo test in diNext.GetFileSystemInfos("*"+tb+"*"+".mp3", SearchOption.AllDirectories))
      {
                    u.Read(test.FullName);
                    Album album = new Album;
                    album.Track = u.Title;
                    album.Artist = u.Artist;
                    Albums.Add(album);
       }
 }

この Collection を ListView にバインドします

  <ListView x:Name="ListView1"  HorizontalAlignment="Left" Width="729" FontFamily="Malgun Gothic" FontSize="24" Background="{x:Null}" Margin="0,0,-2,0" ItemsSource="{Binding  Path=Albums}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Song name" DisplayMemberBinding="{Binding Track}" Width="550"/>
                <GridViewColumn Header="Artist" DisplayMemberBinding="{Binding Artist}" Width="170"/>
            </GridView>
        </ListView.View>
        <ListView.DataContext>
            <Classes:Library/>
        </ListView.DataContext>
        <Classes:Library Text=""/>
    </ListView>
于 2013-10-16T16:21:55.433 に答える