2012-03-13 18 views
1

Windows Phone Appをビルドしていますが、ObservableCollectionをネストされた構造体と正しくバインドしようとしています。ObservableCollectionのXAMLバインドネスト構造<T>

public class MyViewModel : PropertyChangedBase 
{ 
    private Player _Player1; 
    public Player Player1 
    { 
     get { return _Player1; } 
     set 
     { 
      if (!value.Equals(_Player1)) 
      { 
       _Player1 = value; 
       NotifyOfPropertyChange(() => Player1); 
      } 
     } 
    } 
    private Player _Player2; 
    public Player Player2 
    { 
     get { return _Player2; } 
     set 
     { 
      if (!value.Equals(_Player2)) 
      { 
       _Player2 = value; 
       NotifyOfPropertyChange(() => Player2); 
      } 
     } 
    } 
    public struct Player 
    { 
     public string Name; 
     public bool IsWinner; 
    } 
} 

MyPageViewModel.cs

public class MyPageViewModel : Screen 
{ 
    public ObservableCollection<MyViewModel> Matches { get; private set; } 
    public MyPageViewModel() 
    { 
     this.Matches = new ObservableCollection<MyViewModel>(); 
     LoadData(); 
    } 
    public void LoadData() 
    {    
     // Matches 
     this.Matches.Add(new MyViewModel() 
     { 
      Player1 = new MyViewModel.Player 
      { Name = "Jhonn", IsWinner = false }, 
      Player2 = new MyViewModel.Player 
      { Name = "Marrie", IsWinner = true } 
     }); 
    } 
} 

MyPage.xaml

<ListBox Margin="0,0,-12,0" ItemsSource="{Binding Matches}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Margin="0,0,0,17" Width="432"> 
       <TextBlock Text="{Binding Player1.Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
       <TextBlock Text="{Binding Player2.Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 




MyViewModel.csは、私は結合エラーを持っていませんが、何の選手名が示されていません。私はいつも空白の画面を持っています。

答えて

1

あなたの問題はここにある:

public struct Player 
{ 
    public string Name; 
    public bool IsWinner; 
} 

バインドするためには、名前はプロパティである必要があります。プレイヤーにクラスを作成し、クラスのプロパティとして名を公開すると、あなたは黄金色になるでしょう:

public class Player 
{ 
    public string Name {get; set;} 
    public bool IsWinner {get;set;} 
} 

あなたは限り、あなたはそれらだけを一度設定して、INotifyPropertyChangedのを実装せずに逃げることができるはずです。彼らが変わるつもりなら、INPCを実装してください。

+0

Works kike a charm! =) – thiagold

関連する問題