2012-03-12 13 views
1

私はC#とWindows Phone 7のためにかなり新しくなっていますが、私は自分自身のために小さなアプリを作ろうと思っています。ここに私の問題があります:DataTemplateの使用

私はMainPage.xaml.csで宣言した私の名前とドリンク変数を配置するDataTemplateを設定しようとしています。ボタン1がクリックされたときにここに私のアクションがあります:

 private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     string Name = participantName.Text; 
     int Drinks = 0; 

     listBox1.Items.Add(Name + Drinks); 
    } 

そしてここでは、MainPage.xamlを

  <ListBox Height="Auto" HorizontalAlignment="Stretch" Margin="7,74,0,0" Name="listBox1" VerticalAlignment="Stretch" Width="Auto"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Height="132"> 
         <TextBlock Text="{Binding Path=Name}" FontSize="35" /> 
         <StackPanel Width="370"> 
          <TextBlock Text="{Binding Path=Drinks}" FontSize="35" /> 
         </StackPanel> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

からの私のDataTemplateでの問題は私のデータが示されていないということです。それはDataTemplateなしでは完璧に動作しますが、私が使用するとすぐに私のテキストは抜けてしまいます。あなたの助けは非常に高く評価されています。

+0

コンパイルするかどうかわかりませんが、あなたがlistBox1.Items.Add(new {Name = Name、Drinks = Drinks})と書く必要があると思います。だからそれを試してみてください。それが動作すれば、あなたは余分なクラスを定義することであなたのコードを台無しにする必要はありません。 – 000

答えて

1

テンプレート自体は問題ありません。しかし、テンプレート上のバインディングは現在間違っています。

リストボックスに新しい項目を追加すると、普通の文字列(現在は空白がありません)が追加されます。ただし、バインディングはリスト内のオブジェクトにNameプロパティDrinksプロパティはもちろん、stringクラスにはありません。ここ

通常の解決策は、論理的に(適切なNameDrinksプロパティで、おそらくPersonDrink)データ自体を格納するクラスを作成し、リストにそれらのオブジェクトを追加することにより、プレゼンテーションからデータモデルを分離することです。

MVVMパターンは、データの変更がビューに反映されるかどうかを確認するための優れた方法です。ここ

+0

私はparticipantNameというTextBoxを持っていることを忘れています。これは私のテキストを取得する場所です。まだ間違っていますか? (私はまだMVVMを読むことはできませんでしたが、今は行います) – Viktor

+0

@Viktor私は最初のコードスニペットでそれを見ました。しかし、それはデータオブジェクトを実際にどのように埋め込むかにのみ影響します。同じ方法でリストボックス(したがってデータテンプレート)にバインドされます。 – dlev

+0

私のクラスはどのように見えますか?次のようなものです: 'public class PersonDrink { string Name = participantName.Text; int飲み物= 0; } ' – Viktor

関連する問題