wpf



  • אני לומדת שנה שנייה במדעי המחשב ועושה פרוייקט בWPF ונקלתי בבעיה אני מוציאה מהקובץ נתונים בצורה הבאה וכשאני מגיעה למאפיין כתובת שעשיתי אותו class עיר רחוב ומספר בניין הוא לא נותן. איך אפשר לעשות את זה ? תודה מראש!!

    foreach (PropertyInfo item in typeof(BE.Tester).GetProperties())
    {
        TypeConverter typeConverter = TypeDescriptor.GetConverter(item.PropertyType);
        object convertValue = typeConverter.ConvertFromString(element.Element(item.Name).Value); 
        item.SetValue(tester, convertValue);
    }
    


  • קוד יפה, לא הבנתי אבל בדיוק מה מטרתו (מילוי מאפייני אובייקט לפי אלמנטים מקובץ XML?).
    מה זה element? מסמך XML?
    יש מצב לדוגמית מהקובץ ודוגמית מהclass?
    תוכלי לקצץ את כל המאפיינים חוץ מהבעייתי.



  • הבנתי את הבעיה.
    את עוברת אלמנט אלמנט בXML ומעבירה את ערכו למאפיין בעל אותו שם במופע tester.
    וכעת עשית שאחד המאפיינים הוא מסוג מחלקה בעלת שלושה מאפיינים.
    אז צריך קונברטר מותאם אישית, אבל השאלה איך זה כתוב בXML, מחכה לעדכון.



  • XElement testerRoot;
    string testerPath = @"testerXml.xml";
    
    
    XElement traineeRoot;
    string traineePath = @"traineeXml.xml";
    
    
    XElement testRoot;
    string testPath = @"testXml.xml";
    
    XElement configRoot;
    string configPath = @"configXml.xml";
    
    private static int testNum = 0;
    
    testerRoot = new XElement("testers");
    testerRoot.Save(testerPath);
    
    
    traineeRoot = new XElement("trainees");
    traineeRoot.Save(traineePath);
    
    
    testRoot = new XElement("tests");
    testRoot.Save(testPath);
    
    configRoot = new XElement("TestNum");
    configRoot.Add(new XElement("TestNum", testNum));
    configRoot.Save(configPath);
    
    if (predicat == null)
    {
        return from item in testerRoot.Elements()
               select ConvertTester(item);
    }
    
    return from item in testerRoot.Elements()
           let s = ConvertTester(item)
           where predicat(s)
           select s;
    
    foreach (PropertyInfo item in typeof(BE.Tester).GetProperties()) {
                    if (item.Name != "Adress")
                    TesterElement.Add(new XElement(item.Name, item.GetValue(tester, null)));
                    else
                    {
                        XElement city = new XElement("city", tester.TesterAdress.City);
                        XElement street = new XElement("street", tester.TesterAdress.Street);
                        XElement BuildingNum = new XElement("buildingNum", tester.TesterAdress.BuildingNum);
                        XElement address = new XElement("Adress",street,BuildingNum,city);
                        TesterElement.Add(address);
                    }
    

    זה בערך חלק מהקוד רק של הטסטר



  • הבנתי.
    אי אפשר להכניס את הכתובת באוטומציה של מיפוי אוטומטי של שמות, צריך לטפל בה ידנית:

    var adress = new TesterAdressType();  //TesterAdressType replace with type of address...
    var el = element.Element("Adress");
    adress.City =  (string)el.Element("city").Value;
    adress.Street = (string)el.Element("street").Value;
    adress.BuildingNum = (string)el.Element("buildingNum").Value; //is string?
    tester.TesterAdress = adress;
    
    foreach (PropertyInfo item in typeof(BE.Tester).GetProperties())
    {
        if(item.Name == "TesterAdress") continue;
    
        TypeConverter typeConverter = TypeDescriptor.GetConverter(item.PropertyType);
        object convertValue = typeConverter.ConvertFromString(element.Element(item.Name).Value); 
        item.SetValue(tester, convertValue);
    }
    

    תראי זה ממש ללימודים כי זה ממש המצאת הגלגל להתחיל מפות XML ידנית לאובייקטים, יש בשביל זה מחלקות כמו הסריאלזציה המובנית בשפה.
    וגם אם לא היה בשפה הדרך הזו היא לא "ברת תחזוקה" באופן מאוד בולט, כל שינוי הכי קטן יקריס כמגדל קלפים את כל הפרוצדורה ומאוד קשה לתקן ולדבאג. טוב אולי את זה בעצמו לומדים ככה...



  • הוא רושם הפנייה לאובייקט לא הוגדרה למופע של אובייקט כשאני מגיעה לשורה adress.City = (string)el.Element("city").Value;



  • @edenbelosh ובטוח הXML אליו את פונה נוצר על ידי הקוד שלך?



  • כשאני עושה את הכתובת בהערה הוא שומר והכל בסדר רק כשמגיע לכתובת הוא רושם הפנייה לאובייקט לא הוגדרה אולי בגלל הvar


התחבר כדי לפרסם תגובה
 

11
מחובר

1.3k
משתמשים

4.7k
נושאים

52.0k
פוסטים

סלולר כשר במחירים הנמוכים ביותר עם ובלי ניוד.

כנסו לאתר לקניה מקוונת, או בדקו סניף קרוב לביתכם.

מוצרים עם הנחה

לחצו פה כדי להגיע לרשימת מוצרים עם הנחה בקיאספי.

בהגעה דרך הלינק, ישנה הנחה בשלב התשלום בקופה!

בא תתחבר לדף היומי!