2012-03-12 64 views
1

爲了這個原因,我對C#和Windows Phone 7相當陌生,但不管怎樣,我已經爲自己製作一個小應用程序而陷入困境。這是我的問題:DataTemplate的使用

我試圖設置一個DataTemplate,它將定位我在MainPage.xaml.cs中聲明的Name和Drinks變量。這裏是我的動作被點擊按鈕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(新{Name = Name,Drinks = Drinks});所以試試吧。如果它有效,那麼你就不必通過定義一個額外的類來搞亂你的代碼。 – 000 2012-03-13 00:16:18

回答

1

模板本身沒問題。但是,模板上的綁定當前不正確。

當您向列表框中添加一個新項目時,您只是添加一個普通的舊字符串(它當前缺少空格,順便說一下)。但是,您的綁定期望列表中的對象具有Name屬性和Drinks財產,當然這string類沒有。

這裏通常的解決辦法是將邏輯數據模型從您的演示通過創建一個類來存儲數據本身(可能PersonDrink,用適當的NameDrinks屬性),然後將這些對象添加到列表中分離出來。

您應該瞭解MVVM模式,因爲它提供了一種很好的方法來確保數據中的更改反映在您的視圖中,反之亦然。

+0

我忘了補充說我有一個名爲participantName的文本框,並且這是我從中獲取文本的地方。那麼它仍然做錯了嗎? (承認,我還沒有設法讀取MVVM,但現在會做) – Viktor 2012-03-13 00:09:42

+0

@Viktor我在第一個代碼片段中看到。但這隻會影響你實際填充數據對象的方式。它們仍然以相同的方式綁定到您的列表框(從而綁定到數據模板)。 – dlev 2012-03-13 00:10:51

+0

那麼我的班怎麼樣?就像這樣:'public class PersonDrink {name} = participantName.Text; int飲料= 0; }' – Viktor 2012-03-13 00:12:42