Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von elTorito
Thema: Nach "Alle Haltepunkte löschen" im VS funktionieren die Haltepunkte nicht mehr
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

habe ein problemchen mit Visual Studio Community 2019

ich habe eine C# UWP App welche 2 Hintergrunddienste ausführt.

Über Debugspeicherort löse ich die Hintergrund Aufgabe aus, und konnte dann den Quellcode Debuggen. Im Backgroundtask habe ich diverse System.Diagnostics.WriteLine.

Das hat auch alles wunderbar funktioniert, bis ich STRG+UMSCHALT+F9 (Alle Haltepunkte löschen) angeklickt habe, jetzt komme ich mit dem Debugger nicht mehr in den Hintergrundtask rein (trotz Breakpoint) , und die System.Diagnostics des Backgroundtask schreibt auch nichts mehr in die Ausgabe.

PS: Habe nun versucht die App auf dem Remotecomputer zu Debuggen. Da bekomme ich gar keine Diagnostics.WriteLine , und Haltepunkte funktionieren da auch nicht einmal in der Vordergrund App.

Wird mit Alle Haltepunkte löschen evtl. noch irgendeine Einstellung verändert die ich jetzt wieder auswählen muss?

Danke

Thema: SQL Transact - Volltextsuche - Ergebnis erklären
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: Sql2008R2

Hi,

vielleicht kann mir hier jemand helfen, ich wundere mich über die Ergebnisse einer SQL Volltextsuche... Siehe Anhang.

Ich habe 2 Suchbegriffe, und möchte Alle Datensätze finden in welchen beide Suchbegriffe vorkommen (Spaltenunabhängig). Es soll ein Treffer gelandet werden wenn, egal in welcher Spalte, beide Suchbegriffe vorkommen. Wenn ein Begriff ein Beschreibung, und der andere in Beschreibung 2 soll auch ein Treffer sein.

Im Anhang habe ich 2 Testsuchen, und frage mich warum der Artikel 000979 nicht gefunden wird.
Im VolltextKatalog sind die entsprechenden Felder indiziert.

Nun habe ich mir gedacht es wäre doch toll wenn es eine Möglichkeit gäbe, die mir sagt, Treffer 1,2, und 3 wurde gefunden weil Suchbegriff in Spalte X, und Suchbegriff in Spalte Y... Um ausschließen zu können dass die hier nur Felder Berücksichtigt werden in denen beide Suchbegriffe vorkommen.

Kann man so etwas realisieren? Oder hat jemand ein Tipp warum der 00979 nicht gefunden wird mit den Suchbegriffen des Beispiel?

Danke

Thema: Ist die Funktion"Unit Test erstellen" bei der VS 2015 Community Edition vorhanden?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

ich habe VS Community 2015 Version 14.0.25431.01 Update 3

Es gab in älteren VS Versionen mal die Funktion (Maus rechtsklick im Codefenster -> Unit Test erstellen), die wurde dann bei einigen Visual Studios rausgenommen und soll ab 2015 wieder vorhanden sein. (Add "Create Unit Tests" menu option back!) oder Unit Test Generator

Bin auch schon über Extras - Anpassen ContextMenü, finde es dort aber auch nicht.

Betrifft das nur eine Spezielle VS 2015 version?

Danke

Thema: [Gelöst] UWP: ListView - Kann man "CanreorderItems" binden
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hi,

danke für eure Antworten ...

Hab nochmal geschaut. Das Binding geht.
Ich hatte vergessen dem Model mitzteilen das s sich etwas geändert hat.

ich hatte:


public bool CanEditGame => this.GameState == GameStatus.NotStarted;

und


public GameStatus GameState
        {
            get
            {
                return _gameStatus;
            }
            set
            {
                if (_gameStatus != value)
                {
                    _gameStatus = value;
                    NotifyPropertyChanged(nameof(CanEditGame)); // <- hinzugefügt 
                }
            }

Nun geht es.
(Freitag Nachmittags vor nem langen Wochenende halt, da sieht/findet man nichts mehr ) ...

Danke

Thema: [Gelöst] UWP: ListView - Kann man "CanreorderItems" binden
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hi,

Ich habe eine Page mit einem ListView wo ich CanReorderItems = true setze.

Ist es möglich diese Eigenschaft an einer Eigenschaft meines Model zu binden?


 <ListView 
                        x:Name="PlayersListView"
                        ItemsSource="{Binding Game.Players}"
                        CanReorderItems="True">
                        </ListView>

Ich hätte gerne :

 <ListView 
                        x:Name="PlayersListView"
                        ItemsSource="{Binding Game.Players}"
                        CanReorderItems="{Binding Game.CanEditGame}">
                        </ListView>

funktioniert aber nicht , ich kann trotzdem noch neu Sortieren.

Danke

Thema: Auswahl der Datenbank ink. Vor/Nachteile für UWA
Am im Forum: Datentechnologien

Ich hab neulich mal das Azure Angebot getestet, Dienst und SQL DB auf Azure veröffentlichen, mit SQLite Offline Sync . Ging schnell zu konfigurieren, funktioniert gut.
Bietet viel, leicht erweiterbar... Finde aber das Preismodell etwas teuer.

Thema: VS2015: Datentyp ändern (umbennenen)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat
Ja, die "Schnellaktionen und Refactorings" sind noch nicht so mächtig, wachsen aber mit jeder Version. Wenn die Lampe leuchtet, aber nichts passiert, betrachte das als "reserved for future use" .



Danke für eure Antworten.

Thema: VS2015: Datentyp ändern (umbennenen)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Abt
Hättest Du OOP verwendet und eine entsprechende Basisklasse, dann könntest es zentral an einer Stelle ändern :-)
So ist es eine Lehrstunde oder Du verwendest Search and Replace mit Regex.

Puh... Jetzt musste ich kurz überlegen, aber ich denke schon ich hab OOP und auch eine Basisklasse, jetzt war ich kurz verwirrt und am grübeln "Wie? das ist nicht oop was ich mache?" ...

Muss(te) den Typ wirklich nur an einer Stelle ändern, habe allerdings ein "Dummy Service" der mir TestDaten generiert, sonst alles gut.

Ja, mache das sonst auch so, ändern bis alle Build Fehler weg sind.


Ich dachte evtl. sei es möglich mit dem Punkt "Schnellaktionen und Refactorings" welcher ganz oben erscheint wenn man rechte Maustaste im Code klickt. Wenn ich da anklicke passiert allerdings nichts.

Thema: VS2015: Datentyp ändern (umbennenen)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

in VS ist es ja möglich eine Klasse umzubenennen und diese wird dann überall im Projekt abgeändert.

Ist es auch möglich auf diese Art und Weise ein datentyp zu ändern?

Also ich hab z.b.

public class HelloClass
{
public string Id{get;set;
}

und möchte nun aus string ein int machen, muss dann anschließend alle funktionen welche den Typ string erwarten abändern.

geht das evtl. einfacher?

Vielen Dank

Thema: K.I. für Darts Spiel
Am im Forum: Rund um die Programmierung

So. eine "K.I." habe ich fertig

Ich Unterteile in Punkte Segmente:
Score >170 (High Segment)
Score > 120 && Score ≤ 170 (Medium Segment)
Score ≤ 120 && Score ≥ 60 (low Segment)
Score < 60 (Low segment)

Für jedes Segment habe ich eine Liste mit den Zahlen und Multipliktoren die in dem Segment getroffen werden können, so wie eine Liste mit den angrenzenden Feldern:


public static List<int> ExtremHighSegmentTargetNumbers = new List<int>
        {
            20,
            19,
            18,
            17
        };
 public static List<int> ExtremMediumSegmentTargetNumbers = new List<int>
        {
            25,
            20,
            19,
            18,
            17,
            16,
            15,
            14,
            13,
            12,
            11,
            1
        };
public static List<int> ExtremLowSegmentTargetNumbers = new List<int>
        {
            25,
            20,
            19,
            18,
            17,
            16,
            15,
            14,
            13,
            12,
            11,
            10,
            9,
            8,
            7,
            6,
            5,
            4,
            3,
            2,
            1,

        };

 public static List<HitTarget> ExtremHighSegmentHitTargets = new List<HitTarget>
        {
            HitTarget.Triple,
            HitTarget.Single
        };

 public static List<HitTarget> ExtremMediumSegmentHitTargets = new List<HitTarget>
        {
            HitTarget.Triple,
            HitTarget.Single,
            HitTarget.Double
        };
public static List<HitTarget> ExtremLowSegmentHitTargets = new List<HitTarget>
        {
            HitTarget.Triple,
            HitTarget.Single,
            HitTarget.Double,
            HitTarget.Out
        };

public static Dictionary<int, List<int>> ExtremHighSegmentNearTargetNumbers = new Dictionary<int, List<int>>
        {
            {20, new List<int>{5,1}},
            {19, new List<int>{7,3}},
            {18, new List<int>{1,4}},
            {17, new List<int>{3,2}},
        };

public static Dictionary<int, List<int>> ExtremMediumSegmentNearTargetNumbers = new Dictionary<int, List<int>>
        {
            {25, new List<int>{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}},    
            {20, new List<int>{5,1}},
            {19, new List<int>{7,3}},
            {18, new List<int>{1,4}},
            {17, new List<int>{3,2}},
            {16, new List<int>{7,8}},
            {15, new List<int>{2,10}},
            {14, new List<int>{11,9}},
            {13, new List<int>{4,6}},
            {12, new List<int>{5,9}},
            {11, new List<int>{14,8}},
            {1, new List<int>{20,18}},
        };

public static Dictionary<int, List<int>> ExtremLowSegmentNearTargetNumbers = new Dictionary<int, List<int>>
        {
            {25, new List<int>{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}},    
            {20, new List<int>{5,1}},
            {19, new List<int>{7,3}},
            {18, new List<int>{1,4}},
            {17, new List<int>{3,2}},
            {16, new List<int>{7,8}},
            {15, new List<int>{2,10}},
            {14, new List<int>{11,9}},
            {13, new List<int>{4,6}},
            {12, new List<int>{5,9}},
            {11, new List<int>{14,8}},
            {10, new List<int>{6,15}},
            {9, new List<int>{14,12}},
            {8, new List<int>{11,16}},
            {7, new List<int>{19,16}},
            {6, new List<int>{10,13}},
            {5, new List<int>{12,20}},
            {4, new List<int>{18,13}},
            {3, new List<int>{19,17}},
            {2, new List<int>{17,15}},
            {1, new List<int>{20,18}},
        };

Damit erzeuge ich je nach Segment eine Liste mit den möglichen Treffern in dem Segment:


 public static List<DartShoot> InitialShoots( List<int> initNumbers, List<HitTarget> initHitTargets, Dictionary<int, List<int>> dictNearShoots)
        {
            List<DartShoot> list = new List<DartShoot>();

            foreach (int i in initNumbers)
            {
                foreach (HitTarget t in initHitTargets)
                {
                    if (i == 25 && t == HitTarget.Triple)
                    {

                    }
                    else
                    {
                        list.Add(new DartShoot() { HitNumber = i, HittedTarget = t, NearShoots = GetNearShoots(i, dictNearShoots) });
                    }
                }
            }

            return list;
        }

Für die möglichen Treffer lade ich die anliegenden Felder :


public static List<DartShoot> GetNearShoots(int hitno, Dictionary<int,List<int>> dict)
        {
            List<DartShoot> list = new List<DartShoot>();
            if (dict.ContainsKey(hitno))
            {
                List<int> iList = dict[hitno];
                foreach (int i in iList)
                {
                    list.Add(new DartShoot() { HitNumber = i, HittedTarget = HitTarget.Single });
                    list.Add(new DartShoot() { HitNumber = i, HittedTarget = HitTarget.Double });
                    if (i != 25)
                        list.Add(new DartShoot() { HitNumber = i, HittedTarget = HitTarget.Triple });
                    list.Add(new DartShoot() { HitNumber = i, HittedTarget = HitTarget.Out });
                }
            }
            return list;
        }

Im Segment > 170:


listAllShoots =  DartShootsDict.ExtremHighSegment();
int initialTargetNo = EnumerableExtensions.RandomEnumValue(DartShootsDict.ExtremHighSegmentTargetNumbers, new Random()).First();
IEnumerable<DartShoot> list = from shoot in listAllShoots
                                              where ((shoot.HitNumber == initialTargetNo) && shoot.HittedTarget == HitTarget.Triple && shoot.HittedTarget != HitTarget.Out)
                                              select shoot;
                    
               
                IEnumerable<DartShoot> nearShootList = null;
                foreach(DartShoot s in list)
                {
                    if (s.NearShoots != null)
                    {
                        nearShootList = list.Concat(new List<DartShoot>(s.NearShoots));
                    }
                }

                HitTarget selHitTarget = EnumerableExtensions.RandomEnumValue(DartShootsDict.ExtremHighSegmentHitTargets, new Random()).First();
                IEnumerable<DartShoot> hittargetlist = from shoot in nearShootList
                                                       where (shoot.HittedTarget == selHitTarget)
                                                       select shoot;
DartShoot ds = EnumerableExtensions.RandomEnumValue(hittargetlist, new Random()).First();

Im Medium / Low Segment :


IEnumerable<DartShoot> list = from shoot in listAllShoots
                                              where ((shoot.HitNumber == initialTargetNo)) 
                                              select shoot;

Low Segment unter 60 Punkte:


IEnumerable<DartShoot> list = from shoot in listAllShoots
                                              where ((shoot.HitNumber == initialTargetNo && shoot.HittedTarget == HitTarget.Double))
                                              select shoot;

Unter 50 Punkte lasse ich noch eine Schleife laufen, welche alle Zahlen/2 prüft, und dann zufällig auswählt ob der Dart gewinnt oder ob es doch ein Zufallswurf wird:


private DartShoot GenerateRandomLowScoreShoot(int doubleNo)
        {
            bool finish = EnumerableExtensions.RandomEnumValue(DartShootsDict.BOut, new Random()).First();
            
            if (finish)
            {
                System.Diagnostics.Debug.WriteLine("Direct Out Shoot ");
                return new DartShoot() { HitNumber = doubleNo, HittedTarget = HitTarget.Double };
            }
            else
            {
                IEnumerable<DartShoot> lds = from shoot in DartShootsDict.ExtremLowSegment()
                                             where ((shoot.HitNumber == doubleNo && shoot.HittedTarget == HitTarget.Double))
                                             select shoot;
                IEnumerable<DartShoot> nearShootList = null;
                foreach (DartShoot s in lds)
                {
                    if (s.NearShoots != null)
                    {
                        nearShootList = lds.Concat(new List<DartShoot>(s.NearShoots));
                    }
                }
                HitTarget selHitTarget = GetRandomTarget(doubleNo, DartShootsDict.ExtremLowSegmentHitTargets);
                IEnumerable<DartShoot> hittargetlist = from shoot in nearShootList
                                                       where (shoot.HittedTarget == selHitTarget)
                                                       select shoot;
                return EnumerableExtensions.RandomEnumValue(hittargetlist, new Random()).First();
            }
        }

Hab jetzt paar Spielchen gemacht, die K.I. pendelt so zwischen Average 60 und 113 derzeit, und braucht 13 bis 25 Darts zum ausmachen , also recht große Streuung, werde da noch bisschen dran "pfeilen" Im Unteren Segment überwirft die KI sich zu Oft. (2-3 mal) dass sind dann die 6-9 Darts Unterschied zwischen Profi und Amateur ungefähr.

Wünsche ein schönes Wochenende

Code werde ich noch aufräumen ...

Peter

Thema: K.I. für Darts Spiel
Am im Forum: Rund um die Programmierung

Hallo,

danke für eure Antworten.

Sind ja einige Möglichkeiten dabei.
Ganz kompliziert wollte ich es nicht machen.

Ich überlege nun wie folgt:

Am Anfang eine Liste mit allen möglichen Wurf Varianten (wie trib meinte), je nach Spielphase und Level des Spieler wird die Liste abgespeckt. Dann weiter entscheiden um die Liste evtl noch weiter zu reduzieren, und von dem was über bleibt hole ich mir ein Zufallswurf.

z.B. Profi Level:
Spiel fängt bei 501 Punkten an
ich biete an:
20,19,18,17

entscheide mich für die T20 und biete an:
T20,S20,T1,S1,T5,5

Anschliessend entscheiden, Treffer auf T20 oder Zufall(S20,T1,S1,5,T5)

Beim Semi Profi z.B. am Anfang:
Die Felder welche dem Profi angeboten wurden plus die angrenzenden Felder:
20,1,5,18,4,19,7,3,2

ich entscheide mich dafür dass er auf T18 geht und biete an:
T18,S18,D18,S1,D1,T1,S4,D4,T4, Out

So irgendwie stell ich mir das nun vor.

Thema: K.I. für Darts Spiel
Am im Forum: Rund um die Programmierung

Hi,

ich möchte meine DartsApp um einen Computer Spieler erweitern.

Ich brauche für einen Wurf eine Nummer und ein Multiplikator (x1,x2,x3).

Mein erster Ansatz war eine fertiges Dictionary mit Fertigen Spielwürfen:


Dictionary<int, List<DartShoot>>ComputerPersonsShoots = new Dictionary<int, List<DartShoot>>
        {
            {0, new List<DartShoot>
                {
                    new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=19,HittedTarget=HitTarget.Triple},
                    new DartShoot(){HitNumber=12,HittedTarget=HitTarget.Double}
                }
            },
....

Aus dem Dictionary hatte ich mir dann ein Zufälliges Spiel rausgesucht, und die Shoots nach und nach abgearbeitet. Was Doof ist, weil man nach einer Weile die Spielzüge kennen dürfte. Die Variante werde ich noch nehmen, um ein eigenes Spiel zu Speichern, um gegen sich selber zu spielen.

Nun habe ich eine Liste mit Nummern, und eine Liste mit HitTargets, wo ich mir zufällig eine Nummer, und ein Multipliaktor rauspicke.


List<int> HardLevelNo= new List<int>(new int[] {25,20,19,18,16,1,5,0});
List<HitTarget> HardLevelHitTargets = new List<HitTarget>() { HitTarget.Single, HitTarget.Triple, HitTarget.Double, HitTarget.Out, HitTarget.Triple, HitTarget.Triple, HitTarget.Double };

Wo ich mir dann jeweils ein ZufallWert raushole:


 public static IEnumerable<T> RandomEnumValue<T>(this IEnumerable<T> source, Random rng)
        {
            Random rnd = new Random();
            List<T> values = Enumerable.ToList(source);
            int size = values.Count - 1;
            while (true)
            {
                yield return values[rnd.Next(size)];
            }
        }

Random rand = new Random();
int randNo = RandomEnumValue(ComputerPersons.X01Extrem, rand).First();
HitTarget randHitTarget = RandomEnumValue(ComputerPersons.X01ExtremHitTargets, rand).First();
new DartShoot(randNo,randHitTarget);

Alternativ könnte man eine Liste oder Dictionary mit fertigen Würfen erstellen, und sich dann ein Zufälliges Paar heranholen:


new List<DartShoot>
{
new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Single},
new DartShoot(){HitNumber=5,HittedTarget=HitTarget.Double},
new DartShoot(){HitNumber=15,HittedTarget=HitTarget.Triple},
new DartShoot(){HitNumber=20,HittedTarget=HitTarget.Double},
...


Wenn der Computer z.B. noch 40 Punkte offen hat, und zum Gewinnen eine 20 x2 braucht. ist es wahsrcheinlicher dass er: Doppel 5 trifft, Doppel 1, 0, oder Einfach 20.

Von der Abhängikeit des Punktestand soll die Wahrscheinlichkeit hervorgehen welches Ziel der Computer Treffen kann. So oder so brauche ich ja einige Listen aus den ich mir die Sachen raushole. Nun überlege ich wie ich das am besten/realistischen steuern könnte.

Wie würdet Ihr das machen? Liste Nummern, Multiplaktor separat, oder eine Paarweise Liste? Oder ganz andere herangehensweise?


Danke

Thema: Feststellen, wenn Index grösser als Anzahl der Items in der Liste ist & letztes Element zurückgeben
Am im Forum: Grundlagen von C#

Ja. Mal schauen was sich noch machen lässt.

Hilft auf jedenfall schonmal, ist der Code doch bisschen verständlicher geworden , zumindest klappt nun alles auf Anhieb wo ich die Tage am rummurksen war und den Überblick verloren hatte.

Danke nochmal.

Thema: Feststellen, wenn Index grösser als Anzahl der Items in der Liste ist & letztes Element zurückgeben
Am im Forum: Grundlagen von C#

so z.B.: ?


   #region Strategy interface
    public interface IXATCStrategy
    {
        int CalculateNextNumber(int currHitNo);
        ATCGameType GameType { get; set; }
        ATCDirection Direction { get; set; }
        ATCSpeed Speed { get; set; }
        bool PlayWithBull { get; set; }
        HitTarget HittedTarget {get;set;}
    }
    #endregion


    public class NextTargetToHitStrategy
    {
        private ATCGameType _gametype;
        private ATCDirection _direction;
        private ATCSpeed _speed;
        bool _playWithBull;
        private HitTarget _hittedTarget;

        public NextTargetToHitStrategy(ATCGameType gameType, ATCDirection direction, ATCSpeed speed, bool playWithBull, HitTarget hittedTarget)
        {
            this._gametype = gameType;
            this._direction = direction;
            this._speed = speed;
            this._playWithBull = playWithBull;
            this._hittedTarget = hittedTarget;
        }

        public IXATCStrategy GetStrategory()
        {
            IXATCStrategy selectedStrategy = null;
            
            if (_direction == ATCDirection.Numerical)
            {
                if (_speed == ATCSpeed.Slow)
                {
                    selectedStrategy = new NumericalSlow();
                }
                else if (_speed == ATCSpeed.Fast)
                {
                    selectedStrategy = new NumericalFast();
                }

            }
            else if (_direction == ATCDirection.Random)
            {
                if (_speed == ATCSpeed.Slow)
                {
                    selectedStrategy = new RandomSlow();
                }
                else if (_speed == ATCSpeed.Fast)
                {
                    selectedStrategy = new RandomFast();
                }
            }
            selectedStrategy.GameType = _gametype;
            selectedStrategy.Direction = _direction;
            selectedStrategy.Speed = _speed;
            selectedStrategy.PlayWithBull = _playWithBull;
            selectedStrategy.HittedTarget = _hittedTarget;
            return selectedStrategy;
        } 

    }

    class NumericalSlow : IXATCStrategy
    {
        private List<int> list = MyDictionary.XATCSortedNumbers;
        public ATCGameType GameType { get; set; }
        public ATCDirection Direction { get; set; }
        public ATCSpeed Speed { get; set; }
        public bool PlayWithBull { get; set; }
        public HitTarget HittedTarget { get; set; }

        public int CalculateNextNumber(int currHitNo)
        {
            return 0;
        }
    }

    class NumericalFast : IXATCStrategy
    {
        private List<int> list = MyDictionary.XATCSortedNumbers;
        public ATCGameType GameType { get; set; }
        public ATCDirection Direction { get; set; }
        public ATCSpeed Speed { get; set; }
        public bool PlayWithBull { get; set; }
        public HitTarget HittedTarget { get; set; }

        public int CalculateNextNumber(int currHitNo)
        {
            return 0;
        }
    }

    class RandomSlow : IXATCStrategy
    {
        private List<int> list = MyDictionary.XATCRandomNumbers;
        public ATCGameType GameType { get; set; }
        public ATCDirection Direction { get; set; }
        public ATCSpeed Speed { get; set; }
        public bool PlayWithBull { get; set; }
        public HitTarget HittedTarget { get; set; }

        public int CalculateNextNumber(int currHitNo)
        {
            return 0;
        }
    }
    
    class RandomFast : IXATCStrategy
    {
        private List<int> list = MyDictionary.XATCRandomNumbers;
        public ATCGameType GameType { get; set; }
        public ATCDirection Direction { get; set; }
        public ATCSpeed Speed { get; set; }
        public bool PlayWithBull { get; set; }
        public HitTarget HittedTarget { get; set; }

        public int CalculateNextNumber(int currHitNo)
        {
            return 0;
        }
    }


Und der Aufruf dann so:


 IXATCStrategy nextTargetToHitStrategy = new NextTargetToHitStrategy(_gameType, _atcDirection, _atcSpeed, _playWithBull, hittarget).GetStrategory();
int strategyResult = nextTargetToHitStrategy.CalculateNextNumber(currHitNo);
System.Diagnostics.Debug.WriteLine("Strategy Result: " + strategyResult);

Thema: Feststellen, wenn Index grösser als Anzahl der Items in der Liste ist & letztes Element zurückgeben
Am im Forum: Grundlagen von C#

Zitat von LaTino


IGameStrategy nextTargetToHitStrategy = new NotSureAboutTheNameStrategyFactory(_atcDirection, _atcSpeed, hittarget).GetStrategy();
return nextTargetToHitStrategy.CalculateNextNumber(currHitNo);

Ich versuch das mal. Vielen Dank für das zeigen.

Thema: Feststellen, wenn Index grösser als Anzahl der Items in der Liste ist & letztes Element zurückgeben
Am im Forum: Grundlagen von C#

Zitat von LaTino
Was mir im Nachhinein noch auffällt - für verschiedene Akteure unterschiedlich schnelle oder ganz unterschiedliche Arten der Fortbewegung zu implementieren, schreit ein bisschen nach Strategy Pattern. Dürfte bei der Organisation deines Codes hilfreich sein.
LaTino

Hallo Latino,

danke für den Verweis auf das Muster. So ähnlich? habe ich es versucht umzusetzen, ich habe eine Basis Klasse Game, welche die ganzen Basis Funktionen beinhaltet, Spieler hinzufügen, bearbeiten, löschen, Start / Ende, und jedes Spiel (es geht um ein Darts Spiel) hat die gleiche Vorgehensweise, es sind immer 3 Darts pro Runde. Alles was darüber hinausgeht habe ich in einer eigenen Klasse ausgegliedert:


public class ATCGame : Game<ATCUserControl>, IGameAroundTheClock
{
...
}

Hier kommen dann die Logiken der verschiedenen Spielarten rein. Wobei ein Spiel selber so Einstellbar sein kann dass es im Grunde doch wieder ein anderes Spiel ist (also wie du jetzt sagst die Fortbewegung mal langsam mal schnell)

In meinen Falle gerade: Eine einfache Zahl getroffen, geht zur nächsten Zahl auf der Dartscheibe, trifft man Doppel/Trippel darf man 2 oder 3 weiter.

Ich guck mir das nochmal an, Code verschönern und vereinfachen (und lesbarer machen) geht fast immer :)

Danke.

Thema: Feststellen, wenn Index grösser als Anzahl der Items in der Liste ist & letztes Element zurückgeben
Am im Forum: Grundlagen von C#

Zitat von Coffeebean
Möchtest du, bevor du das (zweit/dritt)-nächste Item von der Liste zurückgibst feststellen, ob es überhaupt ein zweit- oder drittnächstes gibt? Wenn ja --> gib das zurück, wenn nein --> gib das letzte der Liste zurück.

Beschreibt das dein Problem?

Hallo CoffeBean,

sorry erstmal für meine Ausdrucksweise, fällt mir manchmal schwer zu Beschreiben was dass Problem ist (Ausser dass ich kommata nicht kann X()

Deine Vermutung passt. Bevor ich das zweit/dritt nächste Element von der Liste hole, soll geprüft werden ob es ein solches gibt, wenn nicht, dann letztes Item zurückgeben.

@Latino, ja ist mir aufgefallen. Hab ich extra so genannt erstmal , weil ich durcheinander kam wann ich welchen Schritt übergab.

Mir ist nun auch aufgefallen dass ich wenn item + x größer als Anzahl der Items in der Liste ist, ich das erste Item zurückgebe, hier muss ich eigentlich nur das letzte Item zurückgeben.
Zitat
Und als Anmerkung, deine Art, mit Daten umzugehen, bewegt sich nah an der Grenze zur obfuscation.


Ja, sorry, ist so eine Macke von mir, ich entwickel meistens drauf los, und Räume erst später den Code auf, und bennene dann die Methoden und klassen um, gucke wo ich noch was optimieren kann, füge Kommentare hinzu... ist mir denke ich klar das ein guter Programmierer (was ich nicht bin) das vorweg schon mit erledigt, und so, einige Fragen / Probleme wahrscheinlich erst gar nicht entstehen würden.


Vielen Dank für euren Denkanstoß

Thema: Feststellen, wenn Index grösser als Anzahl der Items in der Liste ist & letztes Element zurückgeben
Am im Forum: Grundlagen von C#

Guten Morgen,

ich habe 2 Listen:


 public static List<int> XATCSortedNumbers = new List<int>()
{
{1},
{2},
....
{19},
{20},
{25}
};

 public static List<int> XATCRandomNumbers = new List<int>()
{
{25},    
{20},
{1},
{18},
{4},
{13},
....
{9},
{12},
{5},
};

Und folgenden Helfer um dort ein passenden wert zu bekommen:


public static class Helperlein
    {
        public static T NextOf<T>(this IList<T> list, T item)
        {
            return list[(list.IndexOf(item) + 1) == list.Count ? 0 : (list.IndexOf(item) + 1)];
        }
        public static T Next2Of<T>(this IList<T> list, T item)
        {
            return list[(list.IndexOf(item) + 2) ≥ list.Count ? 0 : (list.IndexOf(item) + 2)];
        }
        public static T Next3Of<T>(this IList<T> list, T item)
        {
            return list[(list.IndexOf(item) + 3) ≥ list.Count ? 0 : (list.IndexOf(item) + 3)];
        }
    }


Und folgende Funktion welche auf den passenden Helferlein verweist:


 public int GetNextNoToHit(int currHitNo, HitTarget hittarget, XATCPerson p)
        {
            int nextNo = 0;
            if (_atcDirection == ATCDirection.Numerical)
            {
                if (_atcSpeed == ATCSpeed.Slow)
                {
                    ///Next sorted 
                    nextNo = MyDictionary.XATCSortedNumbers.NextOf(currHitNo);
                }
                else if (_atcSpeed == ATCSpeed.Fast)
                {
                    //Next sorted +2 or +3 
                    if (hittarget == HitTarget.Single)
                    {
                        nextNo = MyDictionary.XATCSortedNumbers.NextOf(currHitNo);
                    }
                    else if (hittarget == HitTarget.Double)
                    {
                        nextNo = MyDictionary.XATCSortedNumbers.Next2Of(currHitNo);
                    } 
                    else if (hittarget == HitTarget.Triple)
                    {
                        nextNo = MyDictionary.XATCSortedNumbers.Next3Of(currHitNo);
                    }
                }
                
            }
            else if (_atcDirection == ATCDirection.Random)
            {
                if (_atcSpeed == ATCSpeed.Slow)
                {
                    // Next Random Nummer 
                    nextNo = MyDictionary.XATCRandomNumbers.NextOf(currHitNo);
                }
                else if (_atcSpeed == ATCSpeed.Fast)
                {
                    //Next sorted +2 or +3 
                    if (hittarget == HitTarget.Single)
                    {
                        nextNo = MyDictionary.XATCRandomNumbers.NextOf(currHitNo);
                    }
                    if (hittarget == HitTarget.Double)
                    {
                        nextNo = MyDictionary.XATCRandomNumbers.Next2Of(currHitNo);
                    }
                    else if (hittarget == HitTarget.Triple)
                    {
                        nextNo = MyDictionary.XATCRandomNumbers.Next3Of(currHitNo);
                    }
                }
            }

            return nextNo;
        }

Ziel ist die letzte Zahl der Liste, wenn nextNo = letzte Zahl, Ziel erreicht, für NextOf passt das, da einer Schritte, stehe ich aber bei XATCSortedNumbers auf 19, und HitTarget ist Triple, bekomme ich 1 zurück.

Wie könnte ich das elegant lösen, dass wenn Next2Of oder Next3Of über das Ende hinaus gehen, ich die letzte Zahl der Liste zurückbekomme?.

ich hatte erst gedacht über IndexOf prüfen, aber damit hätte ich Probleme wenn schon beim Start weil Index von nextNo immer kleiner ist als FinalNo:


else if (hittarget == HitTarget.Triple)
                    {
                        nextNo = MyDictionary.XATCRandomNumbers.Next3Of(currHitNo);
                        if (MyDictionary.XATCRandomNumbers.IndexOf(nextNo) < MyDictionary.XATCRandomNumbers.IndexOf(GetFinalNo()))
                        {

                        }
                        
                    }

Hat jemand ein Denkanstoß für mich.? 8)

Vielen Dank

Thema: [Gelöst] Verschiedene Klassen in gleiches "Form" verwenden
Am im Forum: Grundlagen von C#

Zitat
Interface?

Hab den Eindruck das die Lösung aller meiner Probleme meistens an fehlenden Interface liegt...

 public interface IGame
    {
        ObservableCollection<Person> Persons{ get; set; }
    }

 private IGame _currGame = (IGame)GameStorage.AllGames.Gs.X01Games[_gameIndex];

 private IGame _currGame = (IGame)GameStorage.AllGames.Gs.X10020Games[_gameIndex];

Was natürlich nicht geht weil nicht gecastet werden kann und ich es erst zur Laufzeit gemerkt hab ... hehe ..

Schönes Wochenende !

Thema: [Gelöst] Verschiedene Klassen in gleiches "Form" verwenden
Am im Forum: Grundlagen von C#

Zitat von p!lle
Nein, partielle Klassen benötigst du, wenn du eine Klasse teilen möchtest (z.B. über mehrere .cs-Dateien).

Ableitungen kannst du ganz einfach ohne Schlüsselwörter anlegen:

Ja, habe das nun auch nochmal nachgelesen. Sind manchmal so Kleinigkeiten wo man denkt dass ist/muss so, und ist aber Fehlerhaft, und verursacht dadurch weitere Fehler

Mit der ObservableCollection <T> das funktioniert gut !


Nun Frage ich mich ob ich auch einen "Generischen Context" hinbekomme... Damit ich einfacher auf die Objekte zugreifen kann, welche sich in den Observable Collections befinden.

Auf ein Game greife ich derzeit wie folgt zu:

Im Falle von X01Game


// Da wo der Game Typ nicht bekannt ist , z.b auf der MakePerson.xaml Page
 
private object currGame;
currGame= GameStore.AllGames.Gs.X01Games[_gameIndex]; 

// wenn bekannt , z.B. in der Game Engine
X01Game currentGame = currGame= GameStore.AllGames.Gs.X01Games[_gameIndex]; 


Im Falle von X10020


currGame= GameStore.AllGames.Gs.X10020Games[_gameIndex]; 

Dann die Person(en).


Person currentPerson = GameStore.AllGames.Gs.X01Games[_gameIndex].Persons.ElementAt(_personIndex);

// oder 

Person currentPerson = GameStore.AllGames.Gs.X10020Games[_gameIndex].Persons.ElementAt(_personIndex);

Das ist ja so nicht wirklich "sexy" ...


Wenn ich auf der MakePerson.xaml Page ankomme, stehen mir die String Parameter "gameType" zur Verfügung ("X01Game" oder "X10020"), wo ich dann mittels Switch momentan die passenden Variablen setze(Generische XAML Page geht glaube ich nicht, sonst würde ich es wie hier machen) :


private object currGame;
private Person currentPerson;

private void SetCurrentGameAndPerson()
        {
            switch (_gameType)
            {
                case "X01Game":
                    currGame = GameStore.AllGames.Gs.X01Games[_gameIndex];
                    if (_personIndex != -1)
                        currentPerson = GameStore.AllGames.Gs.X01Games[_gameIndex].Persons.ElementAt(_personIndex);
                    else
                        currentPerson = new X01Person();
                    break;
                case "X10020":
                    currGame = GameStore.AllGames.Gs.X10020Games[_gameIndex];
                    if (_personIndex != -1)
                        currentPerson = GameStore.AllGames.Gs.X10020Games[_gameIndex].Persons.ElementAt(_personIndex);
                    else
                        currentPerson = new PersonX10020();
                    break;
                default:
                    break;
            }
        }


Wie könnte ich hier auch ein Spiel Generisch machen? Habe die Struktur mal vereinfacht zum Testen:


    public class Games
    {
        public Games() { }

        public ObservableCollection<X01Game> X01Games { get; set; }
        public ObservableCollection<X10020Game> X10020Games { get; set; }
    }


    public class Person
    {
        public string Name { get; set; }
    }
    public class PersonX01 : Person
    {
        public string X01PersonProperty { get; set; }
    }
    public class PersonX10020 : Person
    {
        public string X10020PersonProperty { get; set; }
    }
    

    public abstract class GameBase<TPerson> where TPerson : Person
    {
        public string GameStatus { get; set; }
        public string GameDuration { get; set; }
        public ObservableCollection<TPerson> Persons { get; set; }
    }

    public class X01Game : GameBase<PersonX01>
    {
        public X01Game(){}
        public string X01GameProperty { get; set; }
    }

    public class X10020Game : GameBase<PersonX10020>
    {
        public X10020Game(){}
        public string X10020GameProperty { get; set; }
    }

     public class TestGenerics
    {
        Games _games;
        public TestGenerics()
        {
            Start();
        }

        private void Start()
        {
            _games = new Games();

            _games.X01Games.Add(new X01Game { GameStatus = "finished", GameDuration = "10hrs" });
            _games.X01Games[0].Persons.Add(new PersonX01 { Name = "Peter" });
            _games.X01Games[0].Persons.Add(new PersonX01 { Name = "Paul" });

            _games.X01Games.Add(new X01Game { GameStatus = "Started", GameDuration = "1hrs" });
            _games.X01Games[1].Persons.Add(new PersonX01 { Name = "Julia" });
            _games.X01Games[1].Persons.Add(new PersonX01 { Name = "Jennifer" });


            _games.X10020Games.Add(new X10020Game { GameStatus = "started", GameDuration = "1hrs" });
            _games.X10020Games[0].Persons.Add(new PersonX10020 { Name = "Peter" });
            _games.X10020Games[0].Persons.Add(new PersonX10020 { Name = "Paul" });

            SelectAX01Game(1);
        }

        private void SelectAX01Game(int index)
        {
            X01Game x = _games.X01Games[index];
            Person p = x.Persons.ElementAt(0);

            // Wünschenswert: 
            GenericGame game = _games.X01Games[index];
            Person p = game.Persons.ElementAt(0);
        }
    }

Interface?

Danke

Thema: [Gelöst] Verschiedene Klassen in gleiches "Form" verwenden
Am im Forum: Grundlagen von C#

Hi,

ja Grundlagen kann man sich nicht oft genug anschauen

Partial class brauche ich doch wenn ich eine Klasse erweitere?
Also es gibt eine Person, und eine erweiterte Person (PersonX10020 ) welche die Person um Merkmale erweitert die nur im Spiel X10020 wichtig sind. (Okay ginge wahrscheinlich auch indem man der Person eine Spiel Eigenschaft anhängt oder so)

INotifyPropertyChanged brauch ich (geht wahrscheinlich auch anders...) um meine UI zu aktualisieren, nachdem dies oder das passiert.

MyGames benötige ich aus diversen Gründen um die Klasse Serialisiert zu speichern, ich starte die App, MyGames wird initialisiert, und dann erst werden bei Bedarf Daten aus dem IsolatedStorage geladen.


Ich versuchs mal mit Generics. Hatte jetzt ein "Workaround" aber nicht Typsicher.

Danke für deine Hilfe

Thema: [Gelöst] Verschiedene Klassen in gleiches "Form" verwenden
Am im Forum: Grundlagen von C#

Hi,

ja, sorry, ich versuchs nochmal genauer.

Also ist eine Win Phone App, die Exception kommt bei :


public partial class App : Application
{

      private void Application_Launching(object sender, LaunchingEventArgs e)
      {
          LoadGamesList();
      }

     private void Application_UnhandledException(object sender,  ApplicationUnhandledExceptionEventArgs e)
     {
           string errorString = "Message: " + e.ExceptionObject.Message + "Stack Trace: " + e.ExceptionObject.StackTrace;
     }

}

Klassen:


public class GameStore : INotifyPropertyChanged
{
     public static MyGames AllGames 
        { 
            get
            {
                if (gamesList == null)
                    gamesList = new MyGames();
                return gamesList;
            }
        }
}

public class MyGames : INotifyPropertyChanged
{
     private Games _g = null;        

     public Games Gs
        {
            get
            {
                if (_g == null)
                    _g = new Games();
                return _g;
            }
}

public class Games : INotifyPropertyChanged
{
   public ObservableCollection<X01Game> X01Games{}
   public ObservableCollection<X10020> X10020Games{}
}

public partial class XGame : INotifyPropertyChanged
{
    [DataMember]
     public ObservableCollection<Person> Persons{}
}

public partial class X10020 : XGame, INotifyPropertyChanged
{
    [DataMember]
     public ObservableCollection<PersonX10020> Persons
}

public partial class X01Game : XGame, INotifyPropertyChanged
{
     [DataMember]
     public ObservableCollection<X01Person> Persons{}
}

public class Person : INotifyPropertyChanged
{
}
public partial class X01Person : Person
{
}
public partial class PersonX10020 : Person
{
}


Demo:


 X10020 demogame = new X10020();
demogame.Name = "Demo";

PersonX10020 person1 = new PersonX10020()
{
  Name = "Peter ",
  Gender = "male",
};

GameStore.AllGames.Gs.X10020Games.Add(demogame);
demogame.Persons.Add(person1);

Auf der Seite wo ich binde :


protected override void OnNavigatedTo(NavigationEventArgs e)
{
   currGame = GameStore.AllGames.Gs.X10020Games[_gameIndex];
   this.DataContext = currGame;
}

Nehme ich this.DataContext = currGame; raus kommt der Fehler nicht. Die Persons Liste ist gefüllt.

Ich hatte bei der Anwendung bisher nur eine Klasse Spiel welche eine Persons Liste hatte, war alles gut, nun möchte ich mehrere Spiele mit jeweils einer Personen Liste implementieren. Wenn die Struktur der Klassen so okay ist, dann kann es eigentlich nur sein dass sich irgendwo beim binden noch auf eine "alte" Person Liste zugegriffen wird.

Ambigous heißt ja so viel wie irgendwas ist mehrdeutig.

Hmm Okay. Der Fehler ist weg wenn ich ein [DataMember] weg nehme, 2 x DataMember Persons scheint also Ambigous...

Ich überprüf nochmal die Datenstruktur....

Thema: [Gelöst] Verschiedene Klassen in gleiches "Form" verwenden
Am im Forum: Grundlagen von C#

Zitat von p!lle
An welcher Stelle wird die Exception denn ausgelöst?

Hi,

scheint mir so als würde die Exception ausgelöst beim Zugriff auf die ObservableCollection<PersonX10020>


public class MyXGames
{
        public ObservableCollection<X01Game> X01GameList{}
        public ObservableCollection<X10020Game>X10020GameList{}

public class XGame 
{
        public ObservableCollection<Person> Persons{}
}
public class X01Person :Person{}
public class X10020Person :Person{}

public class X01Game :XGame
{
         public ObservableCollection<PersonX01> Persons{}
}

public class X10020Game :XGame
{
         public ObservableCollection<PersonX10020> Persons{}
}

Zu Testzwecken:


 X10020 demogame = new X10020();
demogame.Name = "Demo";
PersonX10020 person1 = new PersonX10020()
{
   Name = "Peter",
   Gender = "male",
};

AllGames.X10020Games.Add(demogame);
demogame.Persons.Add(person1);

demogame.Persons ist an eine ListBox gebunden

Beim Zugriff auf die Seite wo die ListBox ist, ist demogame.Persons leer.

Scheint sich ins Gehege zu kommen mit XGame.Persons?

Benenne ich XGame.Persons um, ist demogame.Persons leer, mit XGame.Persons, ist demogame.Persons gefüllt, aber es kommt der Fehler.

Danke

Thema: [Gelöst] Verschiedene Klassen in gleiches "Form" verwenden
Am im Forum: Grundlagen von C#

Zitat von LaTino
"Klappt irgendwie nicht" ist keine Fehlermeldung. Ich vermute mal, dir würde ein Dictionary helfen.
LaTino

Hi,

ja, "irgendwie nicht" ist keine Fehlermeldung , stimmt schon...

habe nun was konkreteres:
Fehler
Unhandled Error
Ambiguous match found.Stack Trace: at System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)

at System.Type.GetProperty(String name)
at System.Windows.PropertyAccessPathStep.ConnectToPropertyInSource(Boolean isSourceCollectionViewCurrentItem)
at System.Windows.PropertyAccessPathStep.ConnectToProperty()
at System.Windows.PropertyAccessPathStep.ReConnect(Object newSource)
at System.Windows.PropertyPathListener.ReConnect(Object source)
at System.Windows.Data.BindingExpression.SourceAcquired()
at System.Windows.Data.BindingExpression.System.Windows.IDataContextChangedListener.OnDataContextChanged(Object sender, DataContextChangedEventArgs e)
at System.Windows.Data.BindingExpression.DataContextChanged(Object sender, DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnAncestorDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.NotifyDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnAncestorDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.NotifyDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnTreeParentUpdated(DependencyObject newParent, Boolean bIsNewParentAlive)
at System.Windows.DependencyObject.UpdateTreeParent(IManagedPeer oldParent, IManagedPeer newParent, Boolean bIsNewParentAlive, Boolean keepReferenceToParent)
at MS.Internal.FrameworkCallbacks.ManagedPeerTreeUpdate(IntPtr oldParentElement, IntPtr parentElement, IntPtr childElement, Byte bIsParentAlive, Byte bKeepReferenceToParent, Byte bCanCreateParent)

Scheint sich also irgendwas zu "überschneiden"

Thema: [Gelöst] Verschiedene Klassen in gleiches "Form" verwenden
Am im Forum: Grundlagen von C#

Hi,

ich habe folgende Klassen:


public class MyXGames
{
        public ObservableCollection<X01Game> X01GameList{}
        public ObservableCollection<X10020Game>X10020GameList{}

public class XGame {}
public class X01Person :Person{}
public class X10020Person :Person{}

public class X01Game :XGame
{
         public ObservableCollection<PersonX01> Persons{}
}

public class X10020Game :XGame
{
         public ObservableCollection<PersonX10020> Persons{}
}


Nun habe ich ein Formular (XAML) welches an eine "Person" gebunden war.
Dieses Form(Eingabemöglichkeit) möchte ich nun "Spielübergreifend" nutzen.

beim Aufruf von dem Form , ich nenne es mal MakePerson, steht mir folgendes zur verfügung:

private int _gameIndex;
private string _gameType;
private int _personIndex;

_gametype stellt den Spieltyp da: X01Game oder X10020Game,

_personindex stellt den index der Person in der Liste Persons da (ggf. -1 wenn eine neue Person erstellt werden muss),

gameIndex stellt den Index des Game in der Liste X01GameList oder X10020GameList da.

Wie kann ich hier gewährleisten dass der richtige Spieler dem richtigen Spiel zugeordnet wird?


public class MakepersonForm
{
   private int _gameIndex;
   private string _gameType;
   private int _personIndex;

   private Person currentPerson;
   private XGame currentGame;

   protected override void OnNavigatedTo(NavigationEventArgs e)
   {
        _gameIndex = int.Parse(NavigationContext.QueryString["index"]);
        _personIndex = int.Parse(NavigationContext.QueryString["pId"]);
        _gameType = NavigationContext.QueryString["gt"];

        SetCurrentGameAndPerson();
   }

}

Ich hab da an folgdendes Gedacht:


private void SetCurrentGameAndPerson()
        {
            switch (_gameType)
            {
                case "X01Game":
                    currGame = AllGames.X01Games[_gameIndex];
                    //currentPerson = currGame.Persons.ElementAt(_personIndex);
                    break;
                case "X10020":
                    currGame = AllGames.X10020Games[_gameIndex];
                    //currentPerson = currGame.Persons.ElementAt(_personIndex);
                    break;
                default:
                    break;
            }
        }

Klappt aber irgendwie nicht, bin zwar schon am Debuggen, aber sehe nicht so recht was das Problem ist, läuft aber was krum mit den Indexes

Versteht Ihr was ich meine? Wie könnte ich das lösen?

Danke

Thema: ObservableCollection MoveUp / MoveDown
Am im Forum: GUI: WPF und XAML

Hi,

VS2013, Windows Phone 8

ich habe eine ObservableCollection<Person>:


public ObservableCollection<Person> Persons
        {
            get
            {
                if (_persons == null)
                {
                    _persons = new ObservableCollection<Person>();
                }
                return _persons;
            }
            set
            {
                if (_persons != value)
                {
                    _persons = value;
                    NotifyPropertyChanged("Persons");
                }
            }
        }
die Collection ist an einer ListBox Gebunden. Nun Versuche ich die Elemente in der Liste zu verschieben. Ich dachte eigentlich folgendes würde gehen:


Persons.Move(oldIndex,newIndex);

Damit bekomme ich aber den Fehler "Not Supported Exception"
Fehler
In System.NotSupportedException ist eine Ausnahme vom Typ "System.Windows.ni.dll" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

Zusätzliche Informationen: Unexpected collection change action 'Move'.

Folgendermaßen geht es :


Persons.RemoveAt(oldindex);
Persons.Insert(newIndex, person);

Warum geht Move hier nicht?

Danke

Thema: Windows Phone 8.1 IValueConverter
Am im Forum: GUI: WPF und XAML

Zitat von t0ms3n
Du hast den Converter von dort übernommen? Sprich Namespace etc. passen?

Ja, habe mir auch sogar schon beispiel Code runtergeladen von WP 8.1 Converter , gleiche Problem mit den Namespace, nun habe ich gelesen das es evtl. auch an VS Community 2015 liegen könnte.



Aber ist mir zu Hoch, ich Update die App mit WP 8.0 weiter, und sobald ich ein WP10 gerät habe versuche ich mich dann mal an Universal Apps.

Habe ein PC mit Win 10, (Ohne Hardware Virtualisation), VS Community 2015, und VS Studio 2013, mit VS 2015 habe ich viele Probleme irgendwie, wie z.B. Errors die angezeigt werden, nach Schließen öffnen ders Projekt weg sind... in VS 2013 aber kann ich keine UAP programmieren... muss mal meine ENtwicklungsumgebungen neu aufsetzen und mal neue Hardware besorgen :)

Thema: Windows Phone 8.1 IValueConverter
Am im Forum: GUI: WPF und XAML

Hi,

ich versuche gerade eine WP8.0 App auf Windows Phone 8.1 zu migrieren (würde auf Universal App gehen aber habe nur ein WP8.1) .

Ich versuche bestimmte Werte zu konvertieren, so wie es in dem Beispiel hier steht:

IValueConverter interface

Es kommt immer der Fehler bei <local:DateFormatter x:Key="FormatConverter" />

Fehler
Der Name DateFormatter ist im namespace using:ConverterParameterEx nicht vorhanden

Diesbezüglich habe ich folgendes probiert: die Converter in eine eigene Library gepackt mit Target Any CPU, Visual Studio Community 2015 geschlossen, neu gestartet, bin/obj Ordner gelöscht , mehr habe ich im www nicht finden können, und weiß grad nicht weiter.

Hat von euch jemand eine Idee?

Danke

Thema: VS 2015 Vorlagen erstellen / Code generieren
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

also ich versuch mal zu Beschreiben was ich mache.

Ich habe ein Projekt Models , dort sind einfache Objekte , diese Objekte /Klasse dienen mir als CodeFirst um Änderungen in der SQL DB zu machen. Also z.B. Klasse Car


public partial class Car : IBaseModel
    {
        public Car()
        {
            
        }

        [MaxLength(50)]
        [Key]
        public string CaryCode { get; set; }
        public string CarName { get; set; }
    }

Dann habe ich ein Projekt DataTier, dort befinden sich die EF Migrationen, Repositories, UnitOfWork


 public interface ICarRepository : IRepository<Car>
    {
    }

    public class CarRepository : Repository<Car>, ICarRepository
    {
        public CarRepository(IUnitOfWork unitOfWork)
            : base(unitOfWork)
        {


        }

        public IQueryable<Car> GetAllCars()
        {
            return this.GetAll();
        }
    }

Dann habe ich ein Projekt BusinnesLogic,


public class CarManager : ICarManager
    {
        private IUnitOfWork _unitOfWork;
        private CarRepository _carRepository;

        public CarManager()
        {
            this._unitOfWork = new UnitOfWork(new MyDBContext());
            this._carRepository = new CarRepository(_unitOfWork);

        }

        public IList<Car> GetAllCars()
        {
            return _carRepository.GetAllCars().ToList();
        }
}

Dann habe ich ein Projekt Interfaces, wo ich ein Interface zum Service und ein Interface zum CarManager drin habe.


 public interface ICarService
    {
        void CreateCar(Car car);
        void DeleteCar(Car car);
        void UpdateCar(Car car);
        IList<Car> GetAllCars();

        event Action<Car> UpdateCarData;
    }

    public interface ICarManager
    {
        void CreateCar(Car car);
        void DeleteCar(Car car);
        void UpdateCar(Car car);
        IList<Car> GetAllCars();
    }

Dann habe ich ein Projekt Service


public class CarService : ICarService, ICarManager
    {
}

Dann habe ich noch ein Projekt Service Access , welches den Zugriff auf den CarService bahandelt,...

Und die GUI ...


Wenn ich nun in der GUI eine Liste von Cars brauche, welche ich mit


public async Task<IList<Car>> GetAllCars()
        {
            var objectList = await Task.Run(() => CarServiceProxy.GetAllCars());
            return objectList;
        }

holen würde. Muss ich ja erst alle anderen Sachen erstellen/zur Verfügung stellen, also Repository, Businness Logic, Service Access, Service... bevor ich Cars in der GUI zur verwenden kann. Ist halt bissl Copy/Paste und Objektname / methoden umbennenen ...

Mit Basis Struktur meinte ich alle verfügungen über Basis Operationen CRUD, wird dann um individuelle Logik erweitert.

Also ich suche einen Weg um das abzukürzen, ich geh momentan hin und erstelle mir eine neue Klasse cars.cs, dann Migration zur DB, dann Repository erstellen, Interfaces erstellen, Businness Layer, Service erstellen, .... Schritte sind immer gleich obs nun Car oder House ist.

Wie würde man das üblicherweise machen?

EDIT: Danke Zelle, dann versuch ich mal damit , Template/Vorlage ist klar , wusste aber nicht genau welche Templates, oder ob VS 2015 da ab haus was anbietet. Ich versuch mal mich da durch zu wusseln.

Danke

Thema: VS 2015 Vorlagen erstellen / Code generieren
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

ich hab eine relativ große Anwendung verteilt auf mehrere Projekte, nun ist es mittlerweile recht mühsam wenn ich eine Klasse / Objekt anlegen möchte. Da sich die Basis Struktur überall wiederholt, möchte ich mit einer Vorlage die passenden Dateien samt klassen/Interfaces erstellen.

Ich hatte mal irgendwo gesehen , nannte sich glaube ich ReverseEngineerCodeFirst, wo anhand einer DB Code Dateien für Context, mapping etc generiert wurden mit T4 ? Templates.

Was sind die richtigen Stichpunkte um solche Vorlagen zu erstellen? Project Templates?

Also ich möchte den Namen der Klasse angeben und dann soll automatisch dies/das jenes an Code generiert werden, wo der Name übernommen wird, und hier/da neue Dateien.cs für angelegt werden, die ich später dann mit individueller Logik erweitern kann.

Arbeite aktuell mit VS 2015 Community, wie kann ich dass umsetzen, bzw. wo finde ich den Einstieg.

Vielen Dank