wpf that page uses initialize args in the frame throw a unexpect error【solved,but how to remove this question?】】

尼龟 杰 190 Reputation points
2023-08-22T11:23:18.4733333+00:00

here is my code(only useful)

using JNGWpfControlLibrary;
using onedrive_mongo;
using QQmusicDLL;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Cache;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using JNGDataTypes.Music;
using System.Net.NetworkInformation;
using JNGWpfControlLibrary.Controls.UserControls;

namespace jngyy2024.Pes
{
    /// <summary>
    /// MusicFoundPage.xaml 的交互逻辑
    /// </summary>
    public partial class MusicFoundPage : Page
    {
        static Dictionary<int, ValueTuple<int, string>> contentCaches = new Dictionary<int, ValueTuple<int, string>>();
        int ID;
        Albumbase myalbum;

        //static string strcontent = string.Empty;
        bool hadcache = false;
        qqmusic QM = new qqmusic();

        public static int GetCacheCount()
        {

            return contentCaches.Count;
        }
        public MusicFoundPage(int id = 0)
        {
            InitializeComponent();
            ID = id;
            //MessageBox.Show(index.ToString());
            //if (hadcache)
            //{
            //    JLV.SelectedIndex = selectindex;
            //    ShowID(strcontent, selectindex);
            //    hadcache = false;
            //}
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            //frame工作原理,实例化一次,但会执行load和unload,不会释放实例,所以可以用变量记录上次操作值
        }

        private void ShowID(string content, int id)
        {
            if (content == string.Empty)
                return;
            WP.Children.Clear();
            if (id == 0)
            {
                JsonNode jobj = JsonNode.Parse(content);
                JsonArray JsonArray = jobj["req_1"]["data"]["group"][0]["toplist"] as JsonArray;
                foreach (var a in JsonArray)
                {
                    JViewButton jView = new JViewButton
                    {
                        Height = 150,
                        Width = 350,
                        Title = a["title"].ToString(),
                        Background = new ImageBrush(BitmapFrame.Create(new Uri(a["frontPicUrl"].ToString()), BitmapCreateOptions.None, BitmapCacheOption.None)),
                        PicStr = a["frontPicUrl"].ToString(),
                        OverContent = $"🎧{Math.Round(a["listenNum"].GetValue<double>() / 10000, 1)}万",
                        Tags = ((JsonArray)a["song"]).Select(x => $"{x["title"]} - {x["singerName"]}").ToArray(),
                        Mid = a["topId"].ToString(),
                        CTime = a["updateTime"].ToString(),
                        Tag = a["period"]
                    };
                    jView.Click += async (sender, e) =>
                    {
                        JViewButton jViewButton = sender as JViewButton;
                        MainWindow.Me.Frame.Navigate(new AlbumDetailPage(new SongList
                        {
                            AMid = jViewButton.Mid,
                            Name = jViewButton.Title,
                            Singers = new singer[] { new singer { name = "群青" } },
                            Style = "Mix",
                            Time = jViewButton.CTime,
                            //Pic = jViewButton.Background,
                            PicStr = jViewButton.PicStr,

                            Songis = await QM.GetSongsByTopID(jViewButton.Mid, MidStation.userData.usefast, jViewButton.Tag.ToString()),

                        }, AlbumDetailPage.ShowType.Network, new Albumbase { Type = "QQ", State = Albumbase.States.Static }));
                    };
                    //await Task.Delay(1000);
                    //string fpbase = "Imas";
                    //if (!Directory.Exists(fpbase))
                    //    Directory.CreateDirectory(fpbase);
                    //string fwpath = a["frontPicUrl"].ToString();
                    //string flpath = Path.Combine(fpbase, Path.GetFileName(fwpath));
                    //if (!File.Exists(flpath))
                    //{
                    //    HttpClient hc = new HttpClient();
                    //    File.WriteAllBytes(flpath, await hc.GetByteArrayAsync(fwpath));
                    //}
                    //jView.Background = new ImageBrush(new BitmapImage(new Uri(flpath, UriKind.Relative)));
                    //BitmapImage bitmapImage = new BitmapImage { CreateOptions = BitmapCreateOptions.IgnoreColorProfile };
                    //bitmapImage.BeginInit();
                    //bitmapImage.UriSource = new Uri(Path.Combine(Environment.CurrentDirectory, flpath));
                    //bitmapImage.EndInit();

                    WP.Children.Add(jView);
                }
            }
            else if (id == 1)
            {
                JsonArray root = JsonNode.Parse(content)["documents"] as JsonArray;


                foreach (var i in root)
                {
                    string dname = i["UserName"].GetValue<string>();
                    string em = i["UserEmail"].GetValue<string>();
                    string[] parts = i["Content"].GetValue<string>().Split(MidStation.SPStr);
                    Albumbase headers = JsonSerializer.Deserialize<Albumbase>(parts[0]);
                    List<SongItem> body = JsonSerializer.Deserialize<List<SongItem>>(parts[1]);

                    JViewButton jView = new JViewButton
                    {
                        Height = 150,
                        Width = 350,
                        Title = headers.Name,
                        Background = new ImageBrush(BitmapFrame.Create(new Uri(headers.Ima), BitmapCreateOptions.None, BitmapCacheOption.None)),
                        PicStr = headers.Ima,
                        OverContent = dname,
                        Tags = body.Select(x => $"{x.songname} - {x.songars}").Take(3).ToArray(),
                        Mid = em,
                        CTime = headers.CTime,
                        Tag = ""
                    };
                    body.ForEach(v => v.islove = MidStation.userData.LoveMids.Contains(v.mid) ? true : false);
                    jView.Click += async (sender, e) =>
                    {
                        JNGWpfControlLibrary.Controls.UserControls.JViewButton jViewButton = sender as JNGWpfControlLibrary.Controls.UserControls.JViewButton;
                        MainWindow.Me.Frame.Navigate(new AlbumDetailPage(new SongList
                        {
                            AMid = jViewButton.Mid,
                            Name = jViewButton.Title,
                            Singers = new singer[] { new singer { name = "群青" } },
                            Style = $"由 {dname} 创建",
                            Time = jViewButton.CTime,
                            //Pic = jViewButton.Background,
                            PicStr = jViewButton.PicStr,

                            Songis = body,

                        }, AlbumDetailPage.ShowType.Mongo, headers));
                    };
                    WP.Children.Add(jView);
                }
            }

            //contentCaches[ID] = (id, content);
        }
        private async void JListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //if ((hadcache) /*|| (selectindex == JLV.SelectedIndex)*/)
            //    return;
            var selectindex = JLV.SelectedIndex;
            if (hadcache)
            {
                hadcache = false;
                return;
            }

            if (!NetworkInterface.GetIsNetworkAvailable())
                return;
            if (selectindex == 0)
            {
                //MessageBox.Show("");
                HttpClient httpClient = new HttpClient();
                var HR = new HttpRequestMessage(HttpMethod.Post, "https://u.y.qq.com/cgi-bin/musicu.fcg") { Content = new StringContent("{\"comm\":{\"cv\":4747474,\"ct\":24,\"format\":\"json\",\"inCharset\":\"utf-8\",\"outCharset\":\"utf-8\",\"notice\":0,\"platform\":\"yqq.json\",\"needNewCode\":1,\"uin\":0,\"g_tk_new_20200303\":5381,\"g_tk\":5381},\"req_1\":{\"module\":\"musicToplist.ToplistInfoServer\",\"method\":\"GetAll\",\"param\":{}}}") };
                HttpResponseMessage? HR1 = null;
                try
                {
                    HR1 = await httpClient.SendAsync(HR);
                }
                catch { return; }
                httpClient.Dispose();
                if (HR1.IsSuccessStatusCode)
                {
                    ShowID(await HR1.Content.ReadAsStringAsync(), 0);
                }
            }
            else if (selectindex == 1)
            {//!!!!!!!!!!!!!islove要根据客户端。
             //style为作者名字
             //sign为作者邮箱
             //state一定为dy
                string? jarrstr = await mongodb.Getall(MidStation.AlbumListStr);
                if (jarrstr == null)
                    return;
                ShowID(jarrstr, 1);
            }
        }

        private void Page_Unloaded(object sender, RoutedEventArgs e)
        {
        }

        private void JLV_Loaded(object sender, RoutedEventArgs e)
        {
            if (!contentCaches.ContainsKey(ID))
                contentCaches.Add(ID, (0, string.Empty));
            else
            {
                hadcache = true;
                JLV.SelectedIndex = contentCaches[ID].Item1;
                ShowID(contentCaches[ID].Item2, contentCaches[ID].Item1);

            }
        }
    }
}


and the errr:

User's image

and turn to the file DefaultBinder.cs,isn't my file,also didn't point out the err-line.

i have no ideas cuz another similar file worked well.

add:User's image

if i remove 'int id = 0' then nothing goes wrong,and i haven't use this class to realize a instance,also i even no coding the class

.NET
.NET
Microsoft Technologies based on the .NET software framework.
4,103 questions
Windows Presentation Foundation
Windows Presentation Foundation
A part of the .NET Framework that provides a unified programming model for building line-of-business desktop applications on Windows.
2,853 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. 尼龟 杰 190 Reputation points
    2023-08-22T14:35:37.6966667+00:00

    solved 。

    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.