2012-11-15 123 views
1

不太確定如何解釋這個問題我有我希望這是有道理的。我想創建一個列表視圖,並建立了所有的數據綁定,並創建了一個模板等,所以它很好地顯示數據,但我顯示每個listview瓦片上的一個元素是一個現場滴答時鐘。真正的問題是如何在不重繪整個列表視圖的情況下更新所有的listview對象。WinJS - 不斷更新到列表視圖

我現在唯一的工作方法是每秒鐘更新綁定到它的數據,我想顯示的時間,哪個工作,但它重繪整個列表視圖。這是昂貴的,並觸發動畫(可以取消,但不完全聽動畫開始事件)

謝謝!

回答

0

一種方法是爲您的listview使用JavaScript模板。正常情況下將數據綁定到列表視圖,但將數據模型添加到稱爲時鐘的數據模型。對於要渲染時鐘集的數據項,它的值爲true。而不是在HTML中定義模板在JavaScript中定義模板(您可以在這裏看到如何執行此操作 - http://msdn.microsoft.com/en-us/library/windows/apps/jj585523.aspx)在JavaScript模板中,您可以添加一些邏輯以確定tile是否應該是基於綁定屬性的時鐘,以及if它是建立在時鐘的模板:

function itemTemplateFunction(itemPromise) { 

     return itemPromise.then(function (item) { 

      if (item.data.clock == true) { 
       //TODO: Append HTML and JS for your clock object 
       //TODO: Perhaps set up a setInterval timer to tick your clock along. 

      } 
      else { 
       //TODO Add the regular template Code, example below 
       var div = document.createElement("div"); 

       var img = document.createElement("img"); 
       img.src = item.data.picture; 
       img.alt = item.data.title; 
       div.appendChild(img); 

       var childDiv = document.createElement("div"); 

       var title = document.createElement("h4"); 
       title.innerText = item.data.title; 
       childDiv.appendChild(title); 

       var desc = document.createElement("h6"); 
       desc.innerText = item.data.text; 
       childDiv.appendChild(desc); 

       div.appendChild(childDiv); 

       return div; 

      } 
     }) 
    }; 
0

由於訪問數據對象(要做到這一點,我想你仍然有時間),模板,如:

<div data-win-control="WinJS.Binding.Template" id="yourTemplate"> 
    <div data-win-bind="textContent: timestamp"></div> 
</div> 

在您希望更改物品時鐘的點,通過它們並更新timestamp屬性,列表視圖將會啓動日期。例如。

var item = getItemToUpdateFromSomewhere(); 
item.timestmap = "2 O'clock";