0

問題が発生している Windows Phone アプリの 1 つのページに少し独自のセットアップがあり、それが使用しているライブラリの問題なのか、それともページのセットアップ方法の問題なのかわかりません。簡単に言えば、1 つのページに、1 つの積み上げ棒グラフ (OxyPlot を使用) を表示する LongListSelector と、いくつかの TextBlocks (主にグラフに関連する販売情報) を含むいくつかのスタック パネルがあります。私がやりたいことは、ユーザーが棒グラフをクリックすると、スタック パネルの情報が同じままで、グラフが別の棒グラフに切り替わることです (1 つは現在までの月、もう 1 つは年までです)。これまでのところ、すべての設定を行うことができましたが、棒グラフをタップすると、「この PlotModel は他の PlotView コントロールによって既に使用されています」というエラーが表示されます。アプリがクラッシュします。私が異なるチャートを切り替えようとしていた方法は、LLS の ItemSource を別のものに置き換えるだけだったので、それが問題なのか、それとも OxyPlot の問題なのかわかりません (彼らのフォーラムからは、モデルは再レンダリングされないため、1 つだけではなく両方のチャートを表示する必要がある場合があります)。これが私がこれまでに行ったことです:

//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;
            });
4

1 に答える 1

0

プロットがレンダリングされると、ItemSource を置き換えることはできません。そうです、それが問題です。LineSeries の以前のインスタンスを削除/非表示にして、同じ PlotModel に新しいインスタンスを作成することをお勧めします。

ラインシリーズを非表示にする方法については、Oxyplot の例があると思います。

http://resources.oxyplot.org/examplebrowser

于 2014-08-26T19:56:20.750 に答える