【发布时间】:2014-07-12 21:50:19
【问题描述】:
我正在开发 WP8 应用程序,但在从普通页面导航回枢轴页面后绑定静态 observablecollection 时遇到问题。
像这样的场景我调用 webservice 然后我将接收到的数据添加到 observablecollection 之后我将 mylist.itemsource = my observablecollection 添加到我在枢轴内的列表框中,它的工作完美告诉我在导航返回时从枢轴构建新页面从新页面到我的数据透视页面,数据透视从头开始重新加载所有数据,所以为了避免这个问题,我制作标志来检查数据是否加载,所以当我让它工作正常但是当新数据添加到静态 observablecollection 时出现问题它不会反映到 UI(电话屏幕视图)。
请帮我解决这个问题和我的这部分代码:-
app启动时在这里检查加载的数据:-
public static ObservableCollection<DataTr> DataReceivedCollectionTr { get; set; }
private void load(object sender,RoutedEventArgs e)
{
if (!IsDataLoaded)
{
GetOpentPos1(accountID);
}
else
{
myListTrade.ItemsSource = DataReceivedCollectionTr;
}
}
这里是调用:
private void GetOpentPos (string accountID)
{
DataReceivedCollectionTr = new ObservableCollection<DataTr>();
myListTrade.ItemsSource = DataReceivedCollectionTr;
string result1;
try
{
var request = HttpWebRequest.Create(new Uri("http://MyIP/vertexweb10/webservice.svc/GetOpenPositions?AccountId="+accountID)) as HttpWebRequest;
request.Method = "GET";
if (request.Headers == null)
{
request.Headers = new WebHeaderCollection();
}
request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();
request.CookieContainer = cookieJar2;
request.BeginGetResponse(ar =>
{
HttpWebRequest req2 = (HttpWebRequest)ar.AsyncState;
using (var response = (HttpWebResponse)req2.EndGetResponse(ar))
{
using (Stream stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
var outerRoot4 = JsonConvert.DeserializeObject<OuterRootObject4>(reader.ReadToEnd());
JArray jsonArray = JArray.Parse(outerRoot4.d);
JToken jsonArray_Item = jsonArray.First;
DispatchInvoke(() =>
{
while (jsonArray_Item != null)
{
int PosID = jsonArray_Item.Value<int>("ID");
if (PosID > 0)
{
string SymbolNameTra = jsonArray_Item.Value<string>;
// Here I add the Data
DataReceivedCollectionTr.Add(new DataTr() { SymbolNameTr = SymbolNameTra});
}
jsonArray_Item = jsonArray_Item.Next;
}
});
}
}
}
}, request);
}
}
这是 XAML 代码:-
<Grid Background="#FF9AB5F9"
x:Name="TradePanel"
Grid.Row="1"
Margin="0,70,0,-5">
<ListBox Cursor="Hand"
BorderBrush="Black"
BorderThickness="1"
Name="myListTrade"
Background="#FF9AB5F9"
Margin="0,-17,0,321">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment"
Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="25,25,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="0" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock x:Name="SymNameTr"
Text="{Binding SymbolNameTr}"
Grid.Row="0"
Grid.Column="0"
HorizontalAlignment="Left"
Foreground="White"
FontSize="18"
FontWeight="Bold"
Margin="5,5,0,0" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
如果需要任何其他代码,请告诉我,以便我可以编辑问题
【问题讨论】:
-
只是猜测:我认为当您向后导航时会创建一个新的数据透视页面实例,因此 IsDataLoaded 为 false 并再次加载。可能是这样吗?
-
IsDataLoaded 为真,任何其他建议
-
好的,那么请发布更多代码。 DataReceivedCollectionTr 在哪里定义以及如何添加新数据(未出现在 UI 中)?
-
谢谢你 Gerrit 的时间,但是你需要什么代码以及关于 DataReceivedCollectionTr 定义检查第一行代码以及我如何添加我使用的数据 DataReceivedCollectionTr.Add() 我已经添加了一个注释代码请检查。
标签: c# windows-phone-8 binding