首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

关于Databinding的有关问题,有没有做Silverlight for Windows Embedded的朋友

2012-06-08 
关于Databinding的问题,有没有做Silverlight for Windows Embedded的朋友?我在WINCE7系统下做了一个Silver

关于Databinding的问题,有没有做Silverlight for Windows Embedded的朋友?
我在WINCE7系统下做了一个Silverlight的小程序,主要主要功能是在一个线程中循环产生数字,在界面中显示出来。
代码是使用Windows Embedded Silverlight Tools生成的,我在MainPage中创建一个线程,里面循环调用MainPage的一个方法,这个方法主要功能就是刷新界面上的ListBoxItem,我采用了两种方法实现:一是采用数据绑定,然后刷新这个DataBinding;另一种是直接调用listBoxItem的SetContent()
结果在虚拟机中,DataBinding走到几十就停止了,而SetContent()可以一直循环,
请大家帮我分析一下我是哪里做错了,按照微软的说法还是应该使用DataBinding作为数据的接口,但是现在没法正常工作
代码如下:
MainPage.xaml:
------------------------------
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="test6.MainPage"
Width="640" Height="480">
<Grid x:Name="LayoutRoot" Background="White">
<Button x:Name="Button1" Height="43" HorizontalAlignment="Right" Margin="0,111,83,0" VerticalAlignment="Top" Width="117" Content="Button"/>
<ListBoxItem x:Name="ListBoxItem1" HorizontalAlignment="Left" Margin="84,111,0,0" Width="138" Content="{Binding L1}" Height="52" VerticalAlignment="Top" Background="#CEFFA3A3" FontSize="16"/>
<ListBoxItem x:Name="ListBoxItem2" Height="43" HorizontalAlignment="Left" Margin="84,187,0,0" VerticalAlignment="Top" Width="138" Content="{Binding L2}" Background="#6971FF6E" FontSize="16"/>
</Grid>
</UserControl>
-----------------------------------
App::GetWindowParameters中添加
pWindowParameters->AllowsMultipleThreadAccess = true;
没有这句,SetContent()也没法运行到最后.

在MainPage.h中添加
HRESULT MainPage::UpdateData();
DWORD WINAPI Thread2 (PVOID pArg);
新建数据绑定类
DataValue.h
------------------------
#pragma once

#include <oleauto.h>

#include "XRCollection.h"

#include "XRPropertyBag.h"

class _declspec(uuid("{9C0158BE-D467-4284-A51A-327DEFE935C5}")) DataValue : public TPropertyBag<DataValue>
{
protected:
DataValue() {};
public:
  HRESULT Initialize(float l1,float l2)
  {
  HRESULT hr = InitializeProperties();
  m_L1 =l1;
m_L2 =l2;
  return hr;
  }
  TBoundProperty<float> m_L1;
  TBoundProperty<float> m_L2;
  HRESULT InitializeProperties()
  {
  HRESULT hr = S_OK;
  hr = BeginRegisterProperties();
  if (FAILED(hr))
  return hr;  
  hr = RegisterBoundProperty(L"L1", m_L1);
  if (FAILED(hr))
  return hr;
hr = RegisterBoundProperty(L"L2", m_L2);
  if (FAILED(hr))
  return hr;
  hr = EndRegisterProperties();
  return hr;
  }
};
--------------------------------

MainPange.cpp:

-----------------------------------

#include "stdafx.h"
#include "test6Generated.h"
#include "MainPage.h"
#include "App.h"
#include "resource.h"
#include "DataValue.h"
#include "oleauto.h"
#include "XRPropertyBag.h"
static XRPtr<DataValue> pDataValue;
static XRValue xrvalueNew;
static float i=0;

HRESULT MainPage::OnLoaded(__in IXRDependencyObject* pRoot)
{
  UNREFERENCED_PARAMETER(pRoot);
  HRESULT hr = InitializeComponent();
DataValue::CreateInstance(&pDataValue);
pDataValue->Initialize(1,2);
XRValue DataContext(pDataValue);


m_pListBoxItem1->SetDataContext(&DataContext);
//m_pListBoxItem2->SetDataContext(&DataContext);
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Thread2,this,0,NULL);
CloseHandle(hThread1);
  return hr;
} // OnLoaded

DWORD WINAPI Thread2 (PVOID pArg)
{
HRESULT hr = E_NOTIMPL;
MainPage* pMainPage = (MainPage *)pArg;
while(i<2000)
{
++i;
  Sleep(200);
pMainPage->UpdateData();
}
return 0;
}

HRESULT MainPage::UpdateData() 

xrvalueNew.SetValue(i); 
  XRAutoCriticalSection csObject; 
  EnterCriticalSection(&csObject); 
//pItemValue->SetValue(L"ID",&xrvalueNew);
pDataValue->m_L1=i;
m_pListBoxItem2->SetContent(&xrvalueNew);
  LeaveCriticalSection(&csObject);
  return S_OK; 
}

#pragma region GeneratedCode
// ============================================================================
// WARNING: DO NOT EDIT THIS ALWAYS-GENERATED CODE
// ============================================================================
HRESULT MainPage::InitializeComponent()
{
  HRESULT hr = E_FAIL;
  FindName(L"LayoutRoot", &m_pLayoutRoot);
  FindName(L"Button1", &m_pButton1);
  FindName(L"ListBoxItem1", &m_pListBoxItem1);
  FindName(L"ListBoxItem2", &m_pListBoxItem2);
  if (m_pLayoutRoot &&
  m_pButton1 &&
  m_pListBoxItem1 &&
  m_pListBoxItem2
  )
  {
  hr = S_OK;
  }
  return hr;
}

// ============================================================================
// WARNING: DO NOT EDIT THIS ALWAYS-GENERATED CODE
// ============================================================================

#pragma endregion GeneratedCode

[解决办法]
使用 SetContent() 报什么错么

热点排行