2013-01-16 3 views
0

XAML :은 ListView에에 관찰 가능한 컬렉션을 바인딩

<Window x:Class="Genesis.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="725" Width="918" Loaded="Window_Loaded" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
<Grid> 
    <ListView Margin="22,39,0,0" Name="Library" DataContext="{Binding}" ItemsSource="{Binding _songData}" HorizontalAlignment="Left" Width="854" Height="427" VerticalAlignment="Top"> 
     <ListView.View> 
      <GridView x:Name="gvLibrary" > 
       <GridViewColumn Width="220" Header="Title" DisplayMemberBinding="{Binding Title}" x:Name="gvColumnTitle" /> 
       <GridViewColumn Width="180" Header="Artist" DisplayMemberBinding="{Binding Artist}" x:Name="gvColumnArtist" /> 
       <GridViewColumn Width="180" Header="Album" DisplayMemberBinding="{Binding Album}" x:Name="gvColumnAlbum" /> 
       <GridViewColumn Width="180" Header="Location" DisplayMemberBinding="{Binding Location}" x:Name="gvColumnLocation" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 
</Window> 

C 번호 :

ObservableCollection<songInfo> songData = new ObservableCollection<songInfo>(); 

    public ObservableCollection<songInfo> _songData 
    { 
     get 
     { 
      return songData; 
     } 
    } 
public ObservableCollection<songInfo> getStoredData() 
    { 

     string[] songs = System.IO.File.ReadAllLines("library"); 

     ObservableCollection<songInfo> songs_formatted = new ObservableCollection<songInfo>(); 

     foreach (string song in songs) 
     { 
      string[] data = song.Split('|'); 
      songs_formatted.Add(new songInfo 
      { 
       Title = data[0], 
       Artist = data[1], 
       Album = data[2], 
       Location = data[3] 
      }); 
     } 
     return songs_formatted; 


    } 
private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (System.IO.File.Exists("library")) 
     { 
      songData = getStoredData(); 
     } 
     else 
     { 
      F.MessageBox.Show("Could not get your Library."); 
     } 

     F.MessageBox.Show(songData.ToArray().Length.ToString()); 
    } 
public class songInfo 
    { 
     public string Title { get; set; } 
     public string Artist { get; set; } 
     public string Album { get; set; } 
     public string Location { get; set; } 
    } 

ObservableCollection 런타임에 제대로 설치되고 있으며 모든 요소가 올바른 형식 : 문제가 함께 할 수있는 뭔가가 콜렉션을리스트 뷰와 컬럼에 바인딩한다.

+1

* 문제는 무엇입니까? – Blachshma

답변

1

songData을 설정했지만 ListView가 _songData에 바인딩되어있어 ListView가 변경된 것을 알 수 없습니다. songData.

_songData에 설정기를 추가하고 getStoredData();으로 설정해보십시오.

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (System.IO.File.Exists("library")) 
     { 
      _songData = getStoredData(); 
     } 
    } 

    private ObservableCollection<songInfo> songData = new ObservableCollection<songInfo>(); 
    public ObservableCollection<songInfo> _songData 
    { 
     get { return songData; } 
     set { songData = value; } 
    } 
관련 문제