2013-02-08 5 views
0

나는이 문제를 직접 해결하지 못해 며칠을 보냈다. 그래서 나는 xaml과 코드 숨김에 대해 아주 기본적인 것을 이해하지 못한다고 믿는다. WPF 및 C#을 사용하여 ListView에서 ObservableCollection의 데이터를 표시하려고합니다."빈"행을 표시하는 목록보기

디버깅을 시작하면 창에 표 및 헤더가있는 목록보기가 표시됩니다. 거기에 있어야하는 항목의 수와 동일한 클릭 가능한 행이 있지만 항목은 비어 있거나 비어 있습니다. 나는 시도하고이를 통해 내 방식을 배울 수 불완전 튜토리얼을 일하고, 코드는 다음과 같다 :

MainWindow.xaml.cs를 :

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent();   
    } 
} 

NameList.cs :

class NameList : ObservableCollection<PersonName> 
{ 
    public NameList() 
     : base() 
    { 
     Add(new PersonName("Willa", "Cather")); //enumerated? (firstName, lastName) 
     Add(new PersonName("Isak", "Dinesen")); 
     Add(new PersonName("Victor", "Hugo")); 
     Add(new PersonName("Jules", "Verne")); 
    } 
} 

PersonName.cs :

class PersonName 
{ 
    private string firstname; 
    private string lastname; 

    public PersonName(string first, string last) 
    { 
     this.firstname = first; 
     this.lastname = last; 
    } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

나는 XAML을 포함 할 것입니다,하지만 난 questi에 그렇게하는 방법을 알아 내지 못했다 여기에, 그래서 난 그냥 그것을 밖으로 철자 것 같은 최고의 내가 할 수있는 : 만 실제 바인딩을 나열했습니다

ListView ItemsSource=""{Binding Source={StaticResource NameListData}}" 

GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" 

GridViewColumn DisplayMemberBinding="{Binding Path=LastName}" 

, 나는 레이아웃 정보가 너무 중요하다고 생각하지만, 내가 알고하지 않았다 I 그 가정에서 틀렸어.

+0

VS를 사용하고 있다면 Visual Studio의 출력 창에 바인딩 오류 메시지가 나타납니다. 그들이 뭐라고하니? – PhoenixReborn

+0

'NameListData'를 어디에서 인스턴스화합니까? – Mash

+0

@Phoenix, 출력 창에 오류가 없습니다. 모든 것은 불만없이 컴파일되며 빈 행만 표시합니다. – spugm1r3

답변

0

을 그래서 단지 그것을 알아 냈습니다. @ LPL에 의해 촉발 된 이해의 플래시.

내 속성을 선언 할 때 개인 문자열에 get 및 set 값을 설정하지 않았으므로 바인딩에서이를 호출 할 때 네 개의 항목이 있음을 알았지 만 빈 항목이었습니다. 이제 기능 코드는 다음과 같습니다.

public string FirstName 
    { 
     get {return firstname; } 
     set{ firstname=value; } 
    } 

성에 해당하는 속성이 있습니다. 큰 문제가되는 간단한 문제에 대한 기쁨.

5

당신은이 일을해야 private 필드

this.firstname 

에 값을 할당하지만 부동산

public string FirstName { get; set; } 

에 결합

public PersonName(string first, string last) 
{ 
    this.Firstname = first; 
    this.Lastname = last; 
} 
+0

당신의 대답은 약간의 오류를 던졌지 만 그것은 나를 올바른 길로 인도했습니다. 영감을 가져 주셔서 감사합니다! – spugm1r3

+2

@ spugm1r3 당신이 올바른 방향으로 데려다 준 줄 알았 으면 '대답'으로 표시 했어야합니다 ... –

2

있도록 데이터와 속성을해야합니다 귀하의 MainWindow를 에 바인딩 할 수 있습니다.

public partial class MainWindow : Window 
{ 
    private NameList _nameList; 

    public NameList NameList 
    { 
     get { return _nameList; } 
     set 
     { 
      if (_nameList != value) 
      { 
       _nameList = value; 
      } 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     NameList = new NameList(); 
    } 
} 
귀하으로 PersonName 클래스는 당신이 그들에 결합 할 수 있도록 속성 (안 회원)을 할당 할 필요가

:

public class PersonName 
{ 
    public PersonName(string first, string last) 
    { 
     FirstName = first; 
     LastName = last; 
    } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

을 그리고 당신의 XAML에서이 같이 결합 할 수 있습니다

<ListView ItemsSource="{Binding NameList}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Run Text="{Binding LastName}" /><Run Text=", " /><Run Text="{Binding FirstName}" /> 
      </TextBlock> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

그래서 결과는 다음과 같이 표시됩니다

enter image description here

+0

너무 실망한 것은 제가 데이터 바인딩을 이해하려고 애를 썼다는 것입니다. 내 문제는 xaml에 놓여있다. 때로는 오류 및 예외에 의존하지 않고 코드에 문제가있는 경우도 있습니다. – spugm1r3

+0

그것은 항상 당신이 마지막으로 기대하는 것입니다;) – TrueEddie

+0

당신은 지금 당장 바보 같은 기분을 압니까? 나는 지난 3 시간을 보냈다. 왜 나의 darn listview가 비어 있었는지에 관해 궁금하게 생각했다. ..dhhhhhhh 나는 원인을 얻지 않고 있었고, 놓았다. .. !!! 고맙습니다! – Tim

관련 문제