我在我的 Windows Phone 应用程序的一个页面上有一些独特的设置,我遇到了问题,我不确定这是否是我正在使用的库或我如何进行页面设置的问题。长话短说,在一个页面上,我有 LongListSelector,它显示一个堆叠条形图(使用 OxyPlot),然后是几个带有一些 TextBlocks 的堆叠面板(主要是与图表相关的销售信息)。我想要做的是,当用户单击条形图时,图表将切换到不同的条形图(一个具有本月至今,另一个是本年至今),而堆栈面板信息保持不变。到目前为止,我已经能够进行所有设置,但是当我点击条形图时出现错误,说明“此 PlotModel 已被其他一些 PlotView 控件使用”。应用程序崩溃。我试图在不同图表之间切换的方式是将 LLS 的 ItemSource 替换为不同的图表,所以我不知道这是否是问题所在,或者这是否只是 OxyPlot 的问题(从他们的论坛听起来像模型不会重新渲染,所以我可能只需要显示两个图表而不是一个)。这是我到目前为止所做的事情:
//first create model for MTD Commissions
PlotModel mtdModel = createMTDModel(mtdValue, mtdGoal);
//Create the Class Item for mtdGDC for LLS Source List
ServiceClasses.SalesGDCClass mtdItem = new ServiceClasses.SalesGDCClass();
mtdItem.model = mtdModel;
mtdItem.footerText = "Tap to view YTD";
mtdItem.version = 0;
//create model for YTD Commissions
PlotModel ytdModel = createYTDModel(ytdValue, (mtdGoal * 12));
//create class item for ytdGDC
ServiceClasses.SalesGDCClass ytdItem = new ServiceClasses.SalesGDCClass();
ytdItem.model = ytdModel;
ytdItem.footerText = "Tap to view MTD";
ytdItem.version = 1;
List<ServiceClasses.SalesItemsClass> mtdSource = new List<ServiceClasses.SalesItemsClass>();
ServiceClasses.SalesItemsClass mtdSalesItem = new ServiceClasses.SalesItemsClass()
{
type = "Sales",
key = "Sales",
salesItem = mtdItem
};
mtdSource.Add(mtdSalesItem);
//create YTD sales Item
List<ServiceClasses.SalesItemsClass> ytdSource = new List<ServiceClasses.SalesItemsClass>();
ServiceClasses.SalesItemsClass ytdSalesItem = new ServiceClasses.SalesItemsClass()
{
type = "Sales",
key = "Sales",
salesItem = ytdItem
};
ytdSource.Add(ytdSalesItem);
//add each transaction found for the last transaction section
foreach (var item in transactionList)
{
ServiceClasses.SalesItemsClass transactionItem = new ServiceClasses.SalesItemsClass()
{
type = "Transaction",
key = "Last 5 Transactions",
transactionItem = item
};
mtdSource.Add(transactionItem);
ytdSource.Add(transactionItem);
}
//create to source lists to switch between the MTD and YTD options
var mtdItemSource = StringKeyGroup<ServiceClasses.SalesItemsClass>.GetGroups(mtdSource, (ServiceClasses.SalesItemsClass c) => c.key);
var ytdItemSource = StringKeyGroup<ServiceClasses.SalesItemsClass>.GetGroups(ytdSource, (ServiceClasses.SalesItemsClass c) => c.key);
salesItemList.ItemsSource = mtdItemSource;
//add tap action to lls
salesItemList.SelectionChanged += (delegate(object sender, SelectionChangedEventArgs e)
{
//if selected item is null do nothing (such as when the page is loaded)
if (salesItemList.SelectedItem == null)
{
return;
}
ServiceClasses.SalesItemsClass selectedItem = (ServiceClasses.SalesItemsClass)salesItemList.SelectedItem;
if (selectedItem.type == "Sales")
{
Debug.WriteLine("the graph was selected");
//in here I was replacing the ItemSource but then it would crash
}
//reset the selected item value back to nothing
salesItemList.SelectedItem = null;
});