Laden...
Avatar #avatar-2567.gif
Benutzerbeschreibung
Gegen WinForms - für WPF! Für längere Zeit inaktiv.

Forenbeiträge von zero_x Ingesamt 1.044 Beiträge

12.11.2009 - 16:30 Uhr

Hallo ihr Beiden,

gibt es noch weitere Gründe, warum man keine Dialoge im ViewModel anzeigen sollte? Was für Alternativen gibt es genüber dem ServiceLocator noch?

zero_x

09.11.2009 - 15:31 Uhr

Hallo FZelle,

deine Aussage habe ich nicht verstanden. Kannst du darauf genauer eingehen?

zero_x

09.11.2009 - 15:09 Uhr

Hallo ihr Beiden,

doch welche Vorteile hat es, wenn man die Dialoge wie hier in diesem Beispiel mit einem _ServiceLocator _aufruft? Der Dialog wird ja letzen Endes doch so oder so angezeigt.

zero_x

09.11.2009 - 14:38 Uhr

Hallo Leute,

immer wieder lese ich, dass man keine Dialoge aus dem ViewModel auszeigen soll. Was spricht dagegen bzw. welche Gründe gibt es, dass man die Dialoge nicht im ViewModel aufrufen soll?

zero_x

07.11.2009 - 12:47 Uhr

Hallo Mr Evil,

vielen lieben Dank! 🙂

zero_x

07.11.2009 - 12:32 Uhr

Hallo herbivore,

danke für den Hinweis.

zero_x

06.11.2009 - 23:30 Uhr

Hallo Mr Evil,

warum packst du den trigger rein wenn du genau diesen effekt nicht willst ?

Genau diesen Effekt möchte ich doch! Das Problem dabei ist, dass beim Klick auf den Button das ListBoxItem **nicht **selektiert wird. Beim Klick soll somit die ListBoxItem selektiert werden.

zero_x

06.11.2009 - 23:02 Uhr

Hallo LatinChriz,

dafür eignet sich das DataContext. Du definierst z.B. im Fenster den DataContext von deiner ObservableCollection und bindest daran die ListBoxen. In den ListBoxen musst du entweder ein ItemTemplate mit den jeweiligen Bindings verwenden oder das DisplayMemberPath-Property.

zero_x

06.11.2009 - 22:53 Uhr

Hallo lord_fritte,

Gibt es ene Möglichkeit die Typen herauszufinden?

das kannst du mit der GetType-Methode herausfinden.

zero_x

06.11.2009 - 22:10 Uhr

Hallo Mr Evil,

dein Beispiel funktionier leider nicht. Das Beispiel habe ich mit einen Trigger für das selektieren der ListBoxItem erweitert. Klickt man auf den Button, passiert genau dieser unerwünschte Effekt.

zero_x

06.11.2009 - 20:49 Uhr

Hallo m0rius,

die LEDs kann man mit dem LPT-Port ansprechen. Die Programmierung in C# ist eigentlich sehr einfach. Schau mal hier und hier.

zero_x

06.11.2009 - 13:47 Uhr

Hat keiner eine Ahnung?

31.10.2009 - 17:59 Uhr

Hallo Lars Schmitt,

das habe ich schon versucht, aber ohne Wirkung.

zero_x

31.10.2009 - 17:23 Uhr

Hallo Leute,

wie ist es möglich, dass man einem Control die Focussierung unterbindet? Nehmen wir als Beispiel ein Button als DataTemplate(ItemTemplate), der als ItemsSource an einer ListBox gebunden ist. Klickt man auf den Button, so wird das ListBoxItem **nicht **focusiert. Klickt man auf das ListBoxItem, aber nicht auf den Button, so findet die Fokusierung trozdem statt. Wie kann man diesen Effekt unterbinden?

Beispiel:

 
<ListBox ItemsSource="{Binding Source={StaticResource data}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Blah}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

zero_x

30.10.2009 - 22:11 Uhr

Hallo manullino,

das lässt sich mithlfe von attached Properties umsetzen. Hier findest du ein Beispiel.

zero_x

28.10.2009 - 18:31 Uhr

Hallo manullino,

am besten ist es, wenn du das ViewModel mit der Eigenschaft "SelectedEmploye" erweiterst und mit ICollectionView bzw. CollectionViewSource an die ObservableCollection bindest. Den Button kannst du dann via Command an die UI binden binden und von dort aus auf SelectedEmploye zugreifen.

zero_x

23.10.2009 - 02:26 Uhr

Hallo wpf23,

das MVVM-Pattern ist ähnlich strukturiert wie das MVC-Pattern, allerdings ist es mithilfe des DataBinding auf WPF angepasst. Man hat dadruch eine klare Trennung zwischen der UI(View) und der Logik(ViewModel).

Gibt es irgendwo ein simples Beispiel?

Ich habe mir überlegt eine kleine WPF Anwendung zu schreiben die irgendwas aus einer MySQL DB ließt. Welche Libs kommen dafür in frage?

Punkt 1 [Hinweis] Wie poste ich richtig?

zero_x

22.10.2009 - 21:23 Uhr

Hallo lord_fritte,

die Fehlermeldung sagt doch schon alles. Du musst den Namespace oder den DataContext zuzweisen.

So wäre es richtig:

<Button Content="Laden" Command="local:Window1.TestCommand"/>

zero_x

18.09.2009 - 20:29 Uhr

Hallo winSharp93,

vielen Dank!

zero_x

17.09.2009 - 18:16 Uhr

Hallo Leute,

in dem von mir zuvor erstellen Thema habe ich gefragt, wie man bestimmte Items einer ListBox farblich hervorheben kann. Das Beispiel von Mr Evil funktioniert teilweise. Mein Vorhaben ist es nun in einer ListBox Daten mit einer ItemsSource zu füllen und dann via MultiBinding die einzelnen Elemente farblich hervorzuheben. In der ItemsSource befinden sich somit die Texte, die fablich hervorgehoben werden sollen. Im DataTemplate einer ListBox befindet sich ein MultiBinding mit dem Converter, einem Bindnig(was soll hervorgehoben werden) und ein Binding an die ItemsSource. Hier ist mein XAML-Code:

<TextBox Text="a" Name="TextBox1"/>

<ListBox ItemsSource="{Binding Source={StaticResource t}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <ContentPresenter>
                    <ContentPresenter.Content>
                        <MultiBinding Converter="{StaticResource c}">
                            <Binding Source="{StaticResource t}" Path="strText"/>
                            <Binding ElementName="TextBox1" Path="Text"/>
                        </MultiBinding>
                    </ContentPresenter.Content>
                </ContentPresenter>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Das Problem ist nun, dass die Items auf der ListBox immer das erste Element der Collection ist. Wie kann man das verhindern bzw. wie zeigt man alle Texte der Collections an?

zero_x

11.09.2009 - 22:12 Uhr

Hallo Mr Evil,

da gabs hier ma n thread wo es n vorschlag gab wie man suchergebnisse entsprechend markiert

Hier im Forum habe ich schon gesucht, allerdings nichts gefunden. 🤔

Dein Beispiel habe ich getestet, aber es scheint nicht zu funktionieren. Kanns du die Funktionsweise ein wenig genauer erläutern?

zero_x

11.09.2009 - 20:50 Uhr

Hallo Leute,

ich möchte auf einer ListBox Daten anzeigen, wo einzelne Wörter farblich gekennzeichnet sind. Die Vorgehensweise, die ich verwendet habe, ist ein einfaches DataTemplate mit einer ItemsSource, die an der ListBox gebunden ist. Im DataTemplate befinden sich merhere TextBlocks.

Wie ist es möglich von der ItemsSource heraus einige Wörter fabrlich zu kennzuzeichnen? Hier habe ich eine - in meinen Augen schlechte - Lösung gefunden, wo die Controls einfach erzeugt werden. Gibt es irgendwelche Alternativen oder Möglichkeiten um gegen mein Problem vorzugehen?

zero_x

06.09.2009 - 17:01 Uhr

Hallo Taladan,

mit deiner Problemstellung habe ich mich auch befasst. Siehe dazu Trennung zwischen UI und Code mit verschiedenen Datenquellen. An deiner Stelle würde ich folgendermaßen vorgehen: Eine List, wo sich eine ObservableCollection befindet anlegen, wo man alle Klassen hinzufügt, die von ObservableCollection erben oder einen Property davon besitzen zur Liste hinzufügen. Das ganze könnte man nun als Property oder direkt "in" die Klasse einbinden. Anschließend im XAML-Code daran binden. Lange Rede, kurzer Sinn - hier ein Beispiel:

public class Person
{
    public string Firstname { get; set; }
    public int Age { get; set; }
}

public class PersonsA : ObservableCollection<Person>
{
    public PersonsA()
    {
        this.Add(new Person { Firstname = "zero_x", Age = 0 });
    }
}

class PersonsB : ObservableCollection<Person>
{
    public PersonsB()
    {
        this.Add(new Person { Firstname = "Taladan", Age = 355 });
    }
}

public class PersonsAll
{
    public ObservableCollection<Person> Get
    {
        get
        {
            // Code vereinfacht - lässt sich natürlich einfacher umsetzen.
            List<ObservableCollection<Person>> list = new List<ObservableCollection<Person>>();
            list.Add(new PersonsA());
            list.Add(new PersonsB());

            ObservableCollection<Person> p = new ObservableCollection<Person>();

            foreach (ObservableCollection<Person> item in list)
            {
                foreach (Person p2 in item)
                {
                    p.Add(p2);
                }
            }

            return p;
        }

    }
}
<ListBox ItemsSource="{Binding Source={StaticResource p}, Path=Get}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Firstname}"/>
                <TextBlock Text="{Binding Age}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

zero_x

05.09.2009 - 14:13 Uhr

Hallo winSharp93,

vielen Dank für deine Hilfe!

zero_x

04.09.2009 - 17:18 Uhr

Hallo Leute,

ich möchte auf einen Control Daten darstellen, die aus unterschiedlichen Quellen herkommen. Mit Datenquellen meine ich z.B. eine Datenbank, XML-Datei oder auch eine ganz normale Klasse, die Daten liefert. Diese ganze Daten sollen zusammen bzw. anschließend auf dem Control dargestellt werden. Somit kann sich auf dem Control einmal Daten aus einer Datenbank und XML-Datei **gleichzeitig **befinden. Die Vorgehensweise, die ich verwende ist das Strategy-Pattern. Im Interface ist alles gekapselt, was variieren bzw. alles, was gleich(im Sinne von was die anderen Datenquellen auch bieten) ist. Die konkreten Strategies liefern die Daten. Alle Datenquellen werden über einen Conetxt zusammen zu dem Control als ItemsSource zugewiesen.

So weit, so gut. Nun sollen alle Daten von allen Quellen in enen ständigen Intervall aktualisiert werden und auf dem Control dargestellt werden. Der Zugriff auf die ItemsSource des Control von der jeweiligen konkreten Strategy ist nicht möglich, da ich diese Strategies als Plugins für meine Anwendung verwenden möchte. Zudem würde das auch nicht die UI von der Logik trennen. Was ist nun? Wie "erhält" man trozdem Zugriff auf das Control?

zero_x

02.09.2009 - 13:54 Uhr

Hallo srynoname,

mit SHGetFileInfo und dem jeweiligen Konstanten und Strukturen sollte es möglich sein.

zero_x

31.08.2009 - 15:13 Uhr

Hallo gfoidl,

Wo wäre der Vorteil von Inline-IL in C#?

Damit meine ich richtigen Assembler-Code. Das hätte z.B. den Vorteil, dass man in C# einen API-Hook programmieren könnte. Möchte man in C# einen API-Hook verwenden, kann man das leider nur mit separten nicht-.NET DLLs umsetzen.

zero_x

31.08.2009 - 14:43 Uhr

Hallo zusammen,

was ich mir wünsche, wäre einerseits ein bessere Unterschützung in Visual Studio für LINQ to XML und das es inline-Assembler in C# gibt. In Visual Basic lässt sich z.B. folgendes machen:

Dim xml = <root>
                <child>myCSharp!</child>
          </root>

zero_x

26.08.2009 - 15:23 Uhr

Hallo Peter Bucher,

so wie ich dich verstanden habe, hast du mein Problem nicht verstanden. Du hast, obwohl es nicht das Problem war ein ganz anderes Beispiel gepostet, was nicht dem meiner Fragestellung entspricht. Ich habe mir sehr wohl einen Finger krumm gemacht; sogar ein Beispiel habe ich gepostet und nach einen weiteren Lösungsweg gefragt.

Warum du so negativ auf meine Frage reagierst, ist mir nicht klar. Du denkst doch jetzt nicht wirklich im ernst, dass ich Fragen hier ins Forum stelle, ohne das ich vorher rechechiere oder in Dokumenationen schaue? Dass ich dir mehrmals meine Problemstellung erklären muss und das ich dann noch dafür angemotzt werde, kann ich einfach nicht verstehen.

zero_x

24.08.2009 - 21:40 Uhr

Hallo ErfinderDesRades,

vielen Dank!

zero_x

24.08.2009 - 20:40 Uhr

Hallo Peter Bucher,

wie du sicherlich aus meinen vorherigen Beiträgen entnehmen kannst, möchte ich meine XML-Datei nicht verändern. Die XML-Datei soll so bleiben, wie sie schon ist.

Welche Funktionen meinst du?

In einer Abfrage sollen Name und Id Elemente von der GruppA abgefragt werden. In einer anderen Abfrage sollen Name und Id von Item abgefragt werden.

zero_x

24.08.2009 - 20:16 Uhr

Hallo Peter Bucher,

wie lauten die Funktionen dazu? Oder kannst du mir noch besser ein kleines Beispiel programmieren?

zero_x

24.08.2009 - 18:34 Uhr

Hallo Peter Bucher,

Allerdings verstehe ich nicht richtig, wie und wodurch da eine Einschänkung geschieht.

In einer Abfrage sollen Name und Id Elemente von der GruppA abgefragt werden. In einer anderen Abfrage sollen Name und Id von Item abgefragt werden.

zero_x

24.08.2009 - 17:27 Uhr

Hallo ihr Beiden,

der Titel des Threads lautet: "LINQ Abfrage mit Einschränkung". Genau das möchte ich umsetzen. Das verändern der Datei ist nicht möglich bzw. sehr aufwenig. Da her auch diese Einschränkung.

zero_x

23.08.2009 - 18:32 Uhr

Hallo winSharp93,

so wie ich das Klassendiagramm verstehe, ist die Strategy mehrmals implementiert. Einaml die Strategy, die von der Klasse SaveStrategy ableitet und eine, die von der Klasse SaveStrategyVM ableitet. Das ist doch doppelt gemoppelt? Oder ist das mit Absicht? Den Lösungsweg finde ich gut, aber trozdem gibt es immer noch einige Punkte(s. Auflistung), worauf es keine Anwort gibt.*Warum nicht statt den ViewModels mehere Models verwenden? Das ViewModel ist somit zu spezifsch für die View. *Ab wann gehört was(Model und ViewModel) zur Buisnesslogik? *Was spricht dagegen, wenn man ein Binding verwendet? *Im Strategy-Pattern ist es so, dass man kapselt, was varriert. Das Speichern mit den einfachen Formaten wie z.B. Textdateien, XML-Dateien wurde gekapselt. Bei spezeifschen Speicherungen wie z.B. das versenden einer E-Mail wurde nicht geklapselt. Wäre es nicht an dieser Stelle sinnvoll das Adapter-Pattern zu verwenden?

Im zweiten Szenario(s. erster Beitrag von mir) wird die UI von der Logik auch nicht getrennt. Vergleicht man das mit dem Fall des Speichern, hat es eine gewisse Ähnlichkeit. Das ganze mit Bindings und Convertern zu lösen, wäre doch an dieser Stelle doch passend oder nicht?

Vielen Dank für das Klassendiagramm! 👍

zero_x

23.08.2009 - 16:08 Uhr

Halllo winSharp93,

ich muss sagen, dass ich deine Gedankengänge nur teilweise verstanden habe. könntest du ein Klassendiagramm zur Verdeutlichung posten?

zero_x

22.08.2009 - 20:50 Uhr

Hallo Peter Bucher,

wie der eigentliche Titel schon sagt, möchte ich mit Absicht einmal die Elemente des Root-Elements als auch die Unterelemente von einander tretten, sodass man zwei Queries hat, womit man einmal den Namen und auch Id der Root als auch den Namen als auch die Id von den Unterelementen ermitteln kann. Die XML-Datei in meinem ersten Beitrag ist mit Absicht so. Genau das ist auch mein Problem.

Okay, die Elemente des Root kann ich schonmal so ermitteln:

var result = from x in xml.Root.Elements("Name")
             select x;
// Ermittelt nur den Namen. Aussage: Das ist GruppA.

Wie kann man nun die Unterelemente, also den Namen und die Id von den Kindelementen auslesen, ohne, dass von der Root den Namen und die Id vorhanden ist? Mein Vorhaben ist es - wie ich es schon beschrieben habe - zwei Queries zu haben, womit man einmal die Einträge von der Root und von den Kindelementen auszulesen.

zero_x

22.08.2009 - 14:58 Uhr

Hallo winSharp93,

Na ja: Du hast z.B. ein SaveStrategyVM. Dieses stellt bereit, was alle Strategien gemeinsam haben.
Davon erstellst du dann Ableitungen, z.b. FileSaveStrategyVM, die das SaveStrategyVM dann um Path erweitern. Davon kannst du dann XmlSaveStrategy usw. ableiten.

Nun kommt aber sicherlich folgende Überlegung in frage: Warum nicht eine Model Verwenden?

So vermeidest du doppelt implementierete Logik im VM.

Aber nach deine Aussage eine doppelt und mehrfach implementierte View.

Man bleibt IMHO aber flexibler. "Ein View pro ViewModel" - diese Regel sollte IMHO konsequent verfolgt werden.

Das wiederspricht aber den Sinn es Strategy-Patterns.

Da muss ich widersprechen: Hilfen zur Benutzerführung (Also Icons, Überschriften, usw.) gehören IMO ins tatsächliche View; nichts ins ViewModel

Vielleicht habe ich mich falsch ausgedrückt, aber damit meine ich, dass man lieber eine View verwenden sollte. In dieser einen View kann man die Icons, Überschriten ect. mit einem Binding lösen. Nun stellt sich aber die Frage, wann man eine neue View braucht, um z.B. E-Mails zu versenden.

So wie ich das MVVM-Pattern verstanden habe, kann man ein ViewModel und mehere Views haben. Das ViewModel weiß, wie es mit dem Model kommunizieren kann. Damit könnte man z.B. die Daten anders anzeigen. Als Beispiel könnte man Personen nach Geschlecht sortieren. Die Sortierung findet im ViewModel statt und stellt die Daten berreit. Nun könnte man aber folgendes meinen:
*An dieser Stelle eine View zu verwenden, ist wohl sehr übertrieben. (M-V-VM) *Die Sortierung sollte lieber ein einem Model stattfinden, da es ein Teil der Businesslogik ist. (M-M-V-[VM]) *Oder es doch lieber mit Bindings(Coverter) und einem DataTemplate lösen? Logik und UI sollten getrennt von einander sein. (M-V-[VM])

Nun könnte man sehr gut über das Thema streiten und disskutieren. Ich werfe mal eine andere Frage in die Runde: Model vs ViewModel - Was bietet mehr Vor- als auch Nachteile? Wann sollte man was verwenden?

zero_x

22.08.2009 - 03:04 Uhr

Hallo winSharp93,

Hier würde ich mit Vererbung innerhalb der ViewModel Klassen arbeiten: Alles gemeinsame in ein ViewModel und dann jeweils eine Ableitung pro Strategie; unabhängig davon, ob diese dann "leer" ist.

Kannst du darauf ein wenig genauer eingehen?

Auch würde ich dann für jede Strategie ein eigenes View schreiben.

Das ist in meinen Augen falsch. Man kann eine Datei sogut als XML-Datei oder als Archiv(zip-Datei) speichern. Dafür braucht man keine weitere UI, da dort schon alles voneinader getrennt ist, sprich gekapselt. Die View hat somit von der ViewModel(fungiert als Strategy) Ahung und weiß, wie sie "reden" kann. Bei weiteren Formaten, wie z.B. das Versenden einer E-Mail bräute man eine weitere UI mit einem weiteren ViewModel.

Du wirst dem Benutzer sicherlich eine Überschrift (ein Icon oder irgendetwas, das von Strategie zu Strategie anders ist), anzeigen.

Wie du sicherlich aus meinen ersten Beitrag entnehmen kannst, ist das Szenario auf eine WPF-Anwendung bezogen. Das ganze könnte man mit einem Binding lösen. Somit ist es wohl der "falsche" weg.

Zu dem Beispiel der Personen: Zwickmühle hin oder her - man kann das ganze auf Interfaces kapseln.

Hallo Mr Evil,

inwiefern und wo sollte man das Proxy-Pattern einsetzen?

zero_x

P.S.: sth_Weird, deine Aussage, dass das Model dumm ist, wird dem ViewModel aber nicht gefallen. 😁

22.08.2009 - 01:41 Uhr

Verwendetes Datenbanksystem: LINQ to XML

Hallo Leute,

in einer XML-Datei befindet sich eine Gruppe von Elementen, die wiederrum in Elemente eingeteilt sind. Auf der Gruppe gibt es einen Namen als auch eine Id, die es wiederrum in den Unter-Elementen gibt. Der XML-Code sieht so aus:

<GruppeA>
	<Name>Das ist GruppA</Name>
	<Id>123</Id>

	<Item>
		<Name>Ich bin ein Item</Name>
		<Id>321</Id>
	</Item>

	<Item>
		<Name>Blubb</Name>
		<Id>555</Id>
	</Item>
</GruppeA>

Nun möchte ich mit LINQ eine einfache Query schreiben, womit man einmal den Namen und die Id vom Basis-Element als auch die Namen und Ids der Unter-Elemente auslesen kann. Wie kann man das trennen bzw. es einschränken?

Mein bisheriger Code:

var result = from x in xml.Descendants("GruppeA").Descendants("Name")
             select x;
// Gibt alle Namen aus:
// Das ist GruppA
// Ich bin ein Item
// Blubb

zero_x

22.08.2009 - 01:25 Uhr

Hallo winSharp93,

natürlich kann man auch Mole dafür verwenden. Wenn man aber zur Laufzeit von einem Control den XAML-Code auslesen möchte, kann man die XamlWriter.Save-Methode verwenden. Man kann es auch umständlich machen.

Möchte man den XAML-Code von einer Anwendung auslesen, die schon kompiliert ist, kann man auch den .NET Reflector mit den BamlViewer Addin verwenden.

zero_x

P.S.: Ich hoffe, dass ich mich bei meiner Aussage nicht irre.

21.08.2009 - 21:00 Uhr

Hallo winSharp93,

so wie Taladan verstanden habe, möchte er den XMAL-Code eines Controls auslesen. Du hast ihn auf einen Debugger hingewiesen. Das kann doch nicht stimmen. Ich hoffe, dass ich ihn an dieser Stelle nicht falsch verstehe.

Hallo Taladan,

du kannst den XAML-Code eines Controls mit der XamlWriter.Save-Methode auslesen. Hier ein keines Beispiel:

Window1 wnd = new Window1();
string strXAML = XamlWriter.Save(wnd);
MessageBox.Show(strXAML);

zero_x

21.08.2009 - 17:11 Uhr

Hallo sth_Weird,

Ich würde auch sagen nur ein Model, denn so wie ich dich verstanden habe sind die Daten ja aus der Datenbank und somit haben sie eine Basisformatierung.

Ja, das Model macht die Busineslogik, also die Daten aus der Datenbank auslesen. Was meinst du mit Basisformtierung?

Sonst hast du mal 10 Views die die Daten unterschiedlich formatiert anzeigen sollen, und müsstest alle Formatierungen im Model machen (wie gesagt, mehrere Models halte ich hier für den falschen Ansatz).

Der Speicherdialog basiert auf einer Strategy. In einer simplen Strategy kann man die Daten z.B. als XML-Datei, Textdokument oder ähnlichen Formaten speichern. Das Problem ist nur, dass bei weiteren Strategies z.B. bem Versenden einer E-Mail man eine weitere UI braucht. Somit braucht man eine weitere Trennung der Strategies.

Dafür macht man dann eher 10 ViewModels.

So kann man das nicht sagen. Man kann nicht zu jeder Strategy eine eigene UI programmieren. Nur bei bestimmten konkreten Strategies.

Aber dir ist ansonsten klar, dass ich zwei Fälle beschrieben habe?

Der zweite Fall mit den formatierten string hat viel Ähnlichkeit mit den ersten Fall. Es gibt **keine **klare Trennung zwischen UI und Code. Gibt eine "Faustregel", wenn man Code und UI "trennen" sollte?

zero_x

20.08.2009 - 14:30 Uhr

Hallo Bernd23,

sicher, dass die Funktion auch richtig exportiert wird? Schau dir mal im Dependency Walker mal die Funktion an. Falls die nicht vorhanden ist, liegt der Fehler in der DLL.

Versuch mal das ganze ohne dem const in der DLL oder gibt ein const in C#-Code an. Vielleicht funktionert es dann.

zero_x

20.08.2009 - 00:40 Uhr

Hallo Da_Flo,

mov     eax,dword ptr [ecx]  ds:0023:00000000=????????

Es scheint so, als ob es eine Access Violation ist, da der Wert von EAX ist 1 ist und somit auf eine Adresse zeigt, die es im DS-Register "nicht gibt". So weit ich weiß, muss es eine Adresse sein, die größer als die ImageBase(meinst 0x400000) ist. In .NET sollte so etwas eigentlich nicht vorkommen(abgesehen von unsicheren Code). Ich vermute mal, dass das aus aus einer unmanaged DLL kommt.

Falls diese Fehler aus eine unmanaged DLL stammt, bleibt dir wohl nich anderes übrig, als manuell im Debugger(z.B. OllyDbg oder WinDbg) nach dem Fehler zu suchen.

Ursache hierfür sind häufig fehlerhafte while-Schleifen

Zur Erinnerung: Das ist dann kein Deadlock, sondern eine Endlosschleife, die schlimmstenfalls einen Überlauf im Stack führt.

zero_x

P.S.: Vielleicht liegt es auch an der calling convention?

19.08.2009 - 23:28 Uhr

Hallo Leute,

in einer MVVM basierenden WPF-Anwendung soll es die Möglichkeit geben, Dateien in unterschiedlichen Formaten zu speichern. Am einfachsten ist es das Strategy-Pattern zu verwenden, wo die konkreten Strategies die Möglichkeit für das Speichern ermöglichen. Das Model bietet die Möglichkeit die Datenbank auszulesen. Die View präsentiert die Daten, der Datenbank. Eine zweite View soll einen Dialog für das Speichern der Strategy bieten. Welche der beiden folgenden Möglichkeiten ist besser?
*Mehre ViewModels verwenden, die für das Speichern zuständig sind. Das ViewModel fungiert sozusagen als Strategy und übermittelt dies der View(Dialog zum Speichern). *Mehere Models, die für das Speichern zuständig sind.

So wie ich das MVVM-Pattern verstanden habe, kann das ViewModel die Daten des Model anders darstellen. Somit ist das ViewModel zu spezifisch für die View.

Nun kommt sicherlich die folgende Überlegung auf: Was, wenn die Strategy weitere Informationen zurückgibt? Man könnte über eine konkrete Strategy z.B. eine E-Mail versenden. Was nun? Benötigt man nun eine weitere UI? Wie würdet ihr vorgehen bzw. gibt es weitere Möglichkeiten um mein Problem zu umgehen?

Ein weiteres Szenario: In einer ganz simplen MVC-Anwendung soll ein string formatiert werden. Man könnte z.B. einen string großschreiben, kleinschreiben oder gar Algorithmen dafür verwenden. Der string wird letztendlich auf der View(UI) angezeigt. Bei dem MVC-Pattern könnte man auch genau so gut mehere Views haben, die einmal ein Balkendiagramm und ein Kreisdiagramm anzeigen soll. Vergleicht man nun den formatierten string mit den Diagrammen, wäre es sozusagen adäquat. Wo soll nun die Formatierung des strings stattfinden? In der View oder im Model(mehrere)?

zero_x

18.08.2009 - 18:02 Uhr

Hallo Leute,

im XAML-Code ist ein DataTemplate für die Klasse Item definiert. Zudem gibt es noch die Items-Klasse(ObservableCollection), die eine ListBox mit Daten füllen soll. Die ListBox liegt auf dem StackPanel, das mit der ItemsSource der ListBox an das DataContext des StackPanels gebunden ist. Nun wird beim Start der Anwendung das DataContext von StackPanel zugewiesen(Items-Klasse).

Soweit so gut. Wie kann man genau dieses Prinzip zur Laufzeit umsetzen? Mein Vorhaben ist es im C#-Code eine Instanz von der Klasse ListBox zu erstellen und dort das Property ItemsSource zuzuweisen. Wie ist das möglich?

zero_x

13.08.2009 - 23:45 Uhr

Hallo JustTom,

soweit wie ich dich verstanden habe, möchtest du an das Image-Control den selektieren Text von einen deiner ListBoxen darstellen. Befinden sich in den ListBoxen z.B. die Pfade eines Bildes, was du mit dem Image binden möchtest, kannst du das mit einem Converter umsetzen.

... beiden Listboxen das SelectionChanged-Event zu registrieren ...

Das ist meiner Meinung nach der falsche Weg! Damit trennt man den Code mit der Logik der UI nicht. Dafür gibt es in WPF Trigger.

zero_x