簡體   English   中英

從Windows Phone 8的列表框中訪問特定的文本塊

[英]accessing specific textblock from a listbox on windows phone 8

我有一個xml文件已下載並首先保存到手機中,然后在用戶導航到應用程序中的某些頁面時打開。 現在,我已經知道如何使用列表框和一些文本塊綁定查看要顯示的所有內容。

XML就像:

  <root>
    <ratings>
      <rating>
        <ratings/>
        <businessID/>
        <counters/>
      </rating>
     ...
    </ratings>
  </root>

XAML

   <ListBox x:Name="sI" 
                 Foreground="Sienna" Margin="368,283,61,-144" RenderTransformOrigin="0.5,0.5">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock x:Name="textblock1" Text="{Binding counter} FontSize="30"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
    </ListBox>

我想訪問列表框內的文本塊,它最多可以給我5個不同的值,並將它們添加到特定的ProgressBars中。 該頁面將顯示5個Textblock和5個進度欄,這些進度條將獲取Textblock的值。 我已經搜索了很多並嘗試了很多東西,但是我遇到了各種各樣的錯誤和消息,而不是我想要訪問的文本塊。

這就是我加載文件的方式。

  XmlSerializer serializer = new
                    XmlSerializer(typeof(Ratings));
                    XDocument document = XDocument.Load(isoStream);
                    Ratings ratings = (Ratings)serializer.Deserialize(document.CreateReader());

這是我可以在列表框中查看帶有附加參數的項目的方法

 sI.ItemsSource = ratings.Collection.Where(c => c.businessID == businessID).ToList();

我想做這樣的事情。

 textblock1.DataContext/Text = ratings.Collection.Where(c => c.businessID == businessID && c.ratings == "4").ToString();

上面在Textblock中給了我這個消息:

 System.Linq.Enumerable+WhereEnumerableIterator`1[Name_of_the_solution.Rating]

和類似的東西來獲取textblock1值並將其放在進度欄上

 progressbar4.Value = Double.Parse(textblock1.Text);

我也嘗試了失敗。

  var elem = from element in document.Elements("ratings")
                              where (string)element.Attribute("rating") == "2" &&
                              (string)element.Attribute("businessID") == businessID
                              select elements().Element("counter");

 var filteredData = from c in document.Descendants("Rating")
                                      where c.Attribute("rating").Value == "1" && c.Attribute("businessID").Value == businessID.ToString()
                                     select new Rating()
                                      {
                                          counter = c.Attribute("counter").Value
                                      };

給我幾乎相同的信息:

 System.Linq.Enumerable+WhereEnumerableIterator`2[Name_of_the_solution.Rating]

我也曾想過繞過所有這些,不建議這樣做,但我現在很拼命,要制作5個具有1個Textblock的列表框,但是我仍然無法從中獲得價值來將每個列表框放在進度條上我想要。

提前致謝。

當答案就這么簡單的時候,我總是試圖用錯誤和困難的方法來做一些編程。

  XmlSerializer serializer = new
                    XmlSerializer(typeof(Ratings));
                    XDocument document = XDocument.Load(isoStream);
                    Ratings ratings = (Ratings)serializer.Deserialize(document.CreateReader());

                    var result = ratings.Collection.Where(c => c.businessID == businessID);
                    if (result == null) return;
                    double db = 0.0;

                    ficounter.Text = result.Where(c => c.ratings == 5).Select(c => c.counter).SingleOrDefault();
                    if (double.TryParse(ficounter.Text, out db))
                        fiprogress.Value = db;

                    focounter.Text = result.Where(c => c.ratings == 4).Select(c => c.counter).SingleOrDefault();
                    if (double.TryParse(focounter.Text, out db))
                        foprogress.Value = db;

                    thcounter.Text = result.Where(c => c.ratings == 3).Select(c => c.counter).SingleOrDefault();
                    if (double.TryParse(thcounter.Text, out db))
                        thprogress.Value = db;

                    twcounter.Text = result.Where(c => c.ratings == 2).Select(c => c.counter).SingleOrDefault();
                    if (double.TryParse(twcounter.Text, out db))
                        twprogress.Value = db;

                    oncounter.Text = result.Where(c => c.ratings == 1).Select(c => c.counter).SingleOrDefault();
                    if (double.TryParse(oncounter.Text, out db))
                        onprogress.Value = db;

這樣,我只是將值傳遞給var,然后通過查詢將值傳遞給Textblock並將該值傳遞給進度條。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM