Laden...
E
Edward myCSharp.de - Member
Softwareentwickler Bremen Dabei seit 11.07.2007 118 Beiträge
Benutzerbeschreibung

Forenbeiträge von Edward Ingesamt 118 Beiträge

01.06.2012 - 08:26 Uhr

Hallo Darth Maim,

die ServiceController Klasse bietet leider nur Zugriffe auf Windows-Dienste, nicht aber auf WCF Services.

Gruß,
Edward

31.05.2012 - 20:42 Uhr

Guten Abend zusammen.

In meiner Firma entwickeln wir derzeit mehrere WCF Services. Jeder Service läuft - lokal - in einer WebDev.WebServer Instanz. Ich habe mir ein Tool geschrieben, welches alle laufenden WebDev.WebServer Instanzen beendet (ist echt nervig, 20 oder mehr Instanzen manuell beenden zu müssen). Das funktioniert auch problemlos (Process Klasse).

Ein Kollege hat mich auf eine Verbesserung hingewiesen: Alle laufenden Instanzen in einer Liste anzeigen und dem Benutzer die Wahl lassen, welche Instanzen beendet werden sollen. Allerdings scheine ich mit .NET Bordmitteln nur den Namen des Prozesses (eben "WebDev.WebServer40.exe" ermitteln zu können. Anscheinend komme ich an die Detailinformationen (z.B. welcher Service in der Instanz läuft) nicht heran.

Hat da jemand zufällig eine Idee?

Vielen Dank schon einmal im Voraus.

Edward

18.12.2011 - 10:30 Uhr

Hallöle.

Danke für den Wink. Manchmal sieht man den Wald vor lauter Bäumen nicht 😉

Habe es nun über eine Rekursion und Children-Auflistungen realisiert.

Kennt jemand von euch zufällig ein gutes Tutorial bzgl. TreeViews und Databinding in WPF? Ich hab mal gelesen, dass sich der Ansatz ziemlich von dem Vorgehen in Windows Forms unterscheiden soll.

17.12.2011 - 22:11 Uhr

Hallo Gü,

sorry. Hatte vergessen, zu erwähnen, dass diese Ebenen u. U. beliebig tief geschachtelt sein könnten. Daher möchte ich ungern eine feste Struktur benutzen.

Gruß,
Edward

17.12.2011 - 19:19 Uhr

Hallo zusammen.

Ich arbeite derzeit an einem kleinen Betfair Client (für die, die es nicht kennen: Betfair ist eine Wettbörse).
Betfair bietet eine API, über die man diverse Märkte (also z.B. "Wer gewinnt das Spiel" bei "Werder Bremen gegen Bayern München") abrufen kann. Die Markt-Informationen bekommt man als String.

Dieser String beinhaltet u.a. auch die Information über die Hierarchie, in der dieser Markt platziert ist. Hier mal ein Beispiel:

\Soccer\Scottish Soccer\Bells League Div 1\Fixtures 22 November \Partick v Clyde

Lesen muss man das natürlich von links nach recht, wobei "Soccer" den obersten Knoten und "Partick v Clyde" die Begegnung darstellt.

Jetzt möchte ich gerne eine Objektstruktur kreieren, in der ich diese Hierarchie auch abbilden kann. Der Hintergrund: ich möchte diese Struktur dann an eine TreeView im Frontend binden und der User soll die Möglichkeit haben, sich durch genau diese Ebenen zu klicken.

Frage: Hat jemand einen Tipp für mich, wie die Objektstruktur in etwa aussehen müsste, um das, was ich möchte, abzubilden?

Vielen Dank schon einmal im Voraus.

Edward

PS: Ich nutze das .NET Framework 4.0. Und da es mir um eine Struktur geht, die ich schon irgendwie speziell auf ein WPF Frontend zuschneiden möchte, habe ich dieses Forum gewählt (sollte eine allgemeinere Struktur - z.B. eine einfache Liste oder ein Dictionary oder ähnliches - ausreichen, ist das natürlich auch in Ordnung 😉 )

02.11.2011 - 14:12 Uhr

Hallo Gü.

Danke für den Link.
Interessant finde ich den Community-Eintrag: How to prevent the .suo file from being persisted.

Da frage ich mich gerade, ob es sinnvoll ist, das Teil grundsätzlich nicht zu speichern...

02.11.2011 - 09:17 Uhr

Hallo Jan,

danke für den Tipp. Das hat echt geholfen 😃
Weißt du, was die *.suo Datei darstellt? Ist das eine Art Cache?
Mir ist nur aufgefallen, dass - nachdem ich sie gelöscht habe - alle Projekte, die ich aus der Solution entladen habe, wieder geladen wurden.

Viele Grüße,
Edward

01.11.2011 - 13:48 Uhr

Hallo zusammen.

Sorry, wenn der Post etwas länger gedauert hat. Ich poste hier einfach mal die Web.config des Service, den ich referenzieren möchte (der Service, um den es sich handelt ist "RacingPostImport"):


<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IRacingPostImport" bypassProxyOnLocal="false" allowCookies="false"
          maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
     useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
        <binding name="BasicHttpBinding_IUserService" maxBufferSize="2147483647"
          maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
        <binding name="BasicHttpBinding_SisImportService" closeTimeout="05:00:00"
     openTimeout="05:00:00" receiveTimeout="05:00:00" sendTimeout="05:00:00"
     allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
     maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
     messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
     useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
           maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
             realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="UserService-Adresse"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUserService"
        contract="UserService.IUserService" name="BasicHttpBinding_IUserService" />
      <endpoint address="SIS-Service-Adresse"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_SisImportService"
        contract="SisImportServiceReference.ISisImportService" name="BasicHttpBinding_SisImportService" />
    </client>
    <services>
      <service behaviorConfiguration="BGT_RacingPostImport" name="BGT_RacingPostImport.RacingPostImport">
        <endpoint binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRacingPostImport"
          name="IRacingPostImport" bindingName="IRacingPostImport" contract="BGT_RacingPostImport.IRacingPostImport" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BGT_RacingPostImport">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Auf der Clientseite gibt es ja noch keine Binding-Informationen für den RacingPost Service. Also spare ich mir die Web.config.

Das Interface von RacingPostImport:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Web;
using System.Text;
using BGT_RacingPostImport.Objects;

namespace BGT_RacingPostImport
{
    [ServiceContract]
    public interface IRacingPostImport
    {
        [OperationContract]
        void Activate();

        [OperationContract]
        void SubscribeEvents(List<EarlyBirdTO> topicData);

        [OperationContract]
        void UnsubscribeEvents(List<string> externalEventIds);
    }
}

Und die implementierende Klasse:


[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class RacingPostImport : IRacingPostImport
{
	// ......
}

Vielleicht hab ich schon Tomaten auf den Augen, aber mir fällt da nichts verdächtiges auf... 🙁
Seht ihr da irgendwas?

Viele Grüße,
Edward

31.10.2011 - 13:34 Uhr

Ich habe die Referenz(en) gelöscht... allerdings hat das am Problem leider nichts geändert. 🙁

31.10.2011 - 13:17 Uhr

Hallo Gü,

in unserer Solution gibt es schon den Fall, dass sich zwei Services gegenseitig referenzieren. Das schien ohne Probleme funktioniert zu haben.

Ich werde dennoch mal versuchen, die Referenz zu entfernen und schauen, ob es dann klappt.

Viele Grüße,
Edward

31.10.2011 - 12:45 Uhr

Hallo zusammen,

ein Kollege von mir hat mit einem WCF Projekt begonnen ("Service A"), welches ich nun fortsetzen soll. In einem anderen WCF Projekt ("Service B") benötige ich eine Referenz auf "Service A".
Jedoch bekomme ich bei dem Versuch, eine Service Referenz hinzuzufügen, eine äußerst vielsagende Fehlermeldung: > Fehlermeldung:

Object reference not set to an instance of an object.

Klingt für mich nach einer klassischen NullReferenceException. Allerdings lässt sich "Service A" selbst problemlos starten.

Im Netz habe ich gelesen, dass beim Hinzufügen von Service Referenzen der Konstruktor nicht aufgerufen wird. Daher habe ich mir dieses Konstrukt eingebaut:


[OnDeserializing]
public void OnDeserializing(StreamingContext streamingContext)
{
    // Activate() ist eine Methode, die eigentlich im Konstruktor aufgerufen wird.
    this.Activate();
}

Allerdings hat das auch nichts gebracht.

Könnte eine etwaige Zirkelreferenz problematisch sein? "Service A" wird von "Service B" konsumiert. Wiederum wird "Service B" auch von "Service A" konsumiert. Könnte das ein Problem darstellen?

So langsam stehe ich echt auf dem Schlauch.

Hat jemand eine Idee?

Vielen Dank schon einmal im Voraus.

Edward

26.08.2011 - 18:19 Uhr

Hallo zusammen.

Ich muss auf Reflection zurückgreifen, um an eine Property eines Objekts zu kommen. Hintergrund: Schaue ich mir ein Objekt z.B. im QuickWatch des VS 2010 an sehe ich dort eine Property "Connection". Auf diese kann ich via Code allerdings nicht direkt zugreifen. Ich bekomme nur lauter GetxxxProperty() und SetxxxProperty() Methoden in der Intellisense angezeigt.

Lasse ich mir per GetProperties() die Properties des Objekts geben, taucht "Connection" dort auch nicht auf. In der QuickWatch ist mir aufgefallen, dass das Icon dieser Property dort einen kleinen "Briefumschlag" (??) hat. Die, die keinen haben, sind per Reflection sichtbar - "Connection" nicht. Weiß zufällig jemand, wo der Unterschied zwischen solchen Properties liegt?

Ich habe mal einen Screenshot angehängt, der verdeutlichen sollte, was ich meine: Property "AcknowledgeMode" hat ein normales Property-Icon. "Connection" eins mit dem "Briefumschlag". Kennt jemand den Unterschied?

Vielen Dank schon einmal im Voraus.

Alex

[Edit]: Anscheinend handelt es sich dabei um "internal" Member.

22.08.2011 - 14:21 Uhr

Hallo Gü,

im Prinzip meinen beide Fragen das selbe: Ob ich irgendwie mitbekommen kann, ob mein Service vom IIS beendet wird. Ich schaue mir den von dir geposteten Link mal an. Vielleicht hilft uns das ja weiter.

Falls nicht, melde ich mich nochmal.

Viele Grüße,
Alex

22.08.2011 - 13:21 Uhr

Hallo zusammen,

ein paar Kollegen und ich implementieren gerade einige WCF Services, die unter dem IIS 7 gehostet werden. Für jeden WebService wird ein eigener ApplicationPool angelegt. Wir haben jetzt die eine oder andere Aktion, die ausgeführt werden muss, wenn der WCF Service vom IIS beendet wird (egal ob via Recycling oder Stop/Start).

Einen Destruktor haben wir implementiert, allerdings scheint der nicht wirklich zuverlässig aufgerufen zu werden.

Kennt jemand eine Möglichkeit, wie man mitbekommen kann, ob der eigene Dienst beendet werden soll oder nicht? Hat der IIS vielleicht irgendwelche Ereignisse, in die man sich einklinken könnte? Ich vermute mal, nein...

Vielen Dank schon einmal im Voraus.

Alex

02.07.2011 - 15:16 Uhr

Hi Abt,

hmm.... ein RSS Client z.B. verarbeitet die ankommenden Daten doch aber auch "automatisch". Er mach ja das selbe, was ich damit vor habe: sie dem Benutzer anzeigen. Schade eigentlich...

02.07.2011 - 10:18 Uhr

Hallo zusammen,

ich war mir nicht sicher, in welches Forum ich meine Frage stellen sollte... da es sich dabei aber um Informationen dreht, die ich aus dem Web beziehen will, ist sie hier gelandet.

Grob gesagt: Ich möchte mir einen Client bauen, der aktuelle Informationen über so ziemlich alle Ereignisse eines laufenden Fußballspiels darstellt (Rote/Gelbe Karten, Tore, Halbzeit, aktueller Spielstand, usw.). Dazu müsste ich die Daten ja irgendwie aus dem Web beziehen. Spontan würden mir da WebServices, RSS Feeds oder Live-Ticker einfallen.

Diesbezüglich bin ich mir über 2 Dinge im Unklaren:

  1. Wo könnte man solche Quellen finden (falls jemand etwas derartiges kennt, immer her damit g)?
  2. Wie könnte ich die dann meiner Anwendung "empfangen"? WebServices stellen kein Problem dar (hab ich schon mal benutzt). Aber wie sähe das mit RSS Feeds oder Live-Tickern aus? Ich bin da z.B. auf das RSS 2.0 Framework auf CodeProject gestoßen.

Wenn sich das gut implementieren ließe bliebe nur noch die Frage, wo ich einen Feed finden kann, der möglichst aktuell und zeitnah neue Infos liefert. Kennt jemand zufällig einen solchen? Was ich nicht suche sind Feeds, die komplette Nachrichten in Textform verschicken (wie z.B. "Beim Spiel xyz hat der Spieler abc nicht gerade seinen besten Tag erlebt..." oder sowas). Ich bräuchte einen, der nur "nackte Fakten" übermittelt.

Vielen Dank schon einmal im Voraus.

Alex

17.03.2011 - 13:21 Uhr

Damit hab ich mich bisher noch nicht beschäftigt. Evtl. gibt es inzwischen andere Wege.

17.03.2011 - 12:20 Uhr

Au weia. schäm

Danke 😃

17.03.2011 - 11:28 Uhr

Hallo zusammen,

ich schreibe gerade eine Anwendung für mein Windows Phone 7 Handy und wollte als Datenquelle XML Dateien verwenden, in die ich meine Datenobjekte de-/serialisiere.
Allerdings taucht im Namespace System.Xml.Serialization kein XmlSerializer auf... Auch z.B. der XmlTextReader / Writer ist dort nicht zu finden.

Die Referenz auf System.Xml.dll (Version 2.0.5.0) ist im Projekt gesetzt. Andere Klassen des Namespace kann ich auch verwenden (z.B. XmlWriter).

Hat jemand eine Idee, warum der XmlSerializer "verschollen" sein könnte?

Vielen Dank schon einmal im Voraus.

Alex

17.03.2011 - 08:23 Uhr

Hallo Michael,

danke für deine schnelle Antwort.

Dann werde ich mir wohl einen eigenen Converter schreiben müssen.

Viele Grüße,
Alex

16.03.2011 - 20:54 Uhr

Guten Abend zusammen,

ich möchte eine kleine App für mein Handy entwickeln, welche u.a. auch Double Werte aus gebundenen Properties anzeigen soll. Diese Werte sollen natürlich als "25,50" angezeigt werden und nicht als "25.5". Die Ersetzung des Punktes durch das Komma hab ich dank "ConverterCulture" hinbekommen.

Allerdings möchte ich den TextBlock (bzw. später auch eine TextBox) so formatieren, dass dort zwei Nachkommastellen angezeigt werden. Im Netz hab ich was von "StringFormat" gelesen. Allerdings wird das Teil bei mir als unbekannt angemarkert...

Hat jemand von euch eine Idee?

Vielen Dank schon einmal im Voraus.

Alex

17.01.2011 - 20:50 Uhr

Daher musst du sowas schreiben

            <myNamespace:Freund.Adresse>  
                    Wunderweg 99 00000 Sternenhaufen  
            </myNamespace:Freund.Adresse>  
  

Der Parser sieht, dass das Adresse Property ne Adresse benötigt, also ruft es für den String den passenden TypeConverter auf. Im oberen Code dagegen setzt du wie die Meldung sagt den Content und sowas ist für deine Adresse Klasse ja gar nicht definiert.

Hallo Talla,

wenn ich dich richtig verstehe, muss ich also das Element <myNamespace:Adresse> weglassen. Ist das korrekt? Sähe dann also so aus:


        <myNamespace:Freund Name="Stevie Wonder">
            <myNamespace:Freund.Adresse>
                    Wunderweg 99 00000 Sternenhaufen
            </myNamespace:Freund.Adresse>
        </myNamespace:Freund>

Dann meldet mir der XAML Parser dieses: "Der String-Werttyp wird von der Adresse-Eigenschaft nicht unterstützt."

Da steh ich grad etwas auf dem Schlauch...

Edit:
Ich habe mir mal den Code aus der Beispiel-DVD angeschaut. Dort existiert genau das selbe Problem. Darf man annehmen, dass das Beispiel im Buch fehlerhaft ist?

17.01.2011 - 20:29 Uhr

Guten Abend zusammen.

Ich ackere mich gerade durch ein Buch zum Thema WPF. Dabei habe ich ein Beispiel nachprogrammiert, das einen eigenen TypeConverter implementiert.
Das funktioniert auch soweit.
Im Buch ("Windows Presentation Foundation" von Gallileo Computing) wird beschrieben, dass sich mit einem eigenen TypeConverter und eigenen Objekten auch die PropertyElement-Syntax anwenden lässt, ohne das ContentPropertyAttribut verwenden zu müssen.

Im Großen und Ganzen sieht das bei mir so aus:

Meine Datenklassen:


namespace Kap_3_6_2_EigenerTypeConverter
{
    [TypeConverter(typeof(AdresseTypeConverter))]
    public class Adresse
    {
        public string Strasse { get; set; }
        public string Hausnummer { get; set; }
        public string PLZ { get; set; }
        public string Ort { get; set; }
    }

    public class Freund
    {
        public string Name { get; set; }
        public Adresse Adresse { get; set; }

        public override string ToString()
        {
            if (this.Adresse != null)
            {
                return String.Format("Name: {0}{1}Strasse: {2} {3}{4}Ort: {5} {6}",
                    this.Name, Environment.NewLine, this.Adresse.Strasse, this.Adresse.Hausnummer, Environment.NewLine, this.Adresse.PLZ, this.Adresse.Ort);
            }
            return this.Name;
        }
    }
}

Der dazugehörige TypeConverter:


    public class AdresseTypeConverter : TypeConverter
    {
        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            if (value != null && value is string)
            {
                string[] werte = value.ToString().Split(' ');

                if (werte.Length == 4)
                {
                    return new Adresse()
                    {
                        Strasse = werte[0],
                        Hausnummer = werte[1],
                        PLZ = werte[2],
                        Ort = werte[3]
                    };
                }
                return base.ConvertFrom(context, culture, value);
            }
            return base.ConvertFrom(context, culture, value);
        }
    }

Und das entsprechende Markup:


<Window x:Class="Kap_3_6_2_EigenerTypeConverter.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:myNamespace="clr-namespace:Kap_3_6_2_EigenerTypeConverter"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <ListBox>
        <sys:String>----- Variante 1 -----</sys:String>
        <myNamespace:Freund Name="Graf Schwanzula">
            <myNamespace:Freund.Adresse>
                <myNamespace:Adresse Strasse="Seniorenweg" Hausnummer="1" PLZ="12345" Ort="Altershausen"/>
            </myNamespace:Freund.Adresse>
        </myNamespace:Freund>
        <sys:String>----- Variante 2 -----</sys:String>
        <myNamespace:Freund Name="Scarlett Johansson" Adresse="Kastanienallee 42 98765 Rottweiler"/>
        <sys:String>----- Variante 3 -----</sys:String>
        <myNamespace:Freund Name="Stevie Wonder">
            <myNamespace:Freund.Adresse>
                <myNamespace:Adresse>
                    Wunderweg 99 00000 Sternenhaufen
                </myNamespace:Adresse>
            </myNamespace:Freund.Adresse>
        </myNamespace:Freund>
    </ListBox>
</Window>

Variante 1 und 2 funktionieren einwandfrei.
Bei Variante 3 bekomme ich diesen Fehler: "Der Adresse-Typ unterstützt keine direkten Inhalte".

Laut Lektüre soll es jedoch möglich sein, da der XAML Parser auch nach einem TypeConverter sucht, wenn kein ContentPropertyAttribut angegeben ist. Anscheinend ist das so nicht der Fall. Hab ich da irgendwo einen Fehler gemacht oder erzählt der Autor dem Leser da einen vom Pferd?

Vielen Dank schon mal für eure Hilfe.

Edward

25.11.2010 - 10:01 Uhr

Okay. Das ist schon mal ein Anhaltspunkt.

Danke dir 😃

25.11.2010 - 09:45 Uhr

Hallo Khalid,

du hast recht. Die Gruppen tauchen in der Auflistung "Allowed Values" auf. Dort müsste ich eine weitere Gruppe programmatisch hinzufügen können.

Könnte das denn funktionieren?

25.11.2010 - 08:38 Uhr

Guten Morgen zusammen,

mal eine Frage an die TFS Experten unter euch: Ist es möglich, programmatisch bestehende WorkItem Types im TFS 2010 anzupassen?

Unser Szenario: Wir haben WorkItem Types, die (so wie eigentlich alle) das Feld "Assigned To" enthalten. Dieses Feld (ist ja ein DropDown) beinhaltet alle Nutzer aus bestimmten TFS Gruppen (Contributors und Project Administrators, wenn ich mich nicht irre). Mit anderen Worten: das Process Template für unsere WorkItems wurde für dieses Feld entsprechend angepasst.

Unser Ziel: Wir haben eine Weitere Gruppe "Team Project Administrators", deren Namen ebenfalls im Feld "Assigned To" auftauchen sollen. Für künftige Projekte muss das Template angepasst werden, das ist uns klar. Für die bestehenden Projekte überlegen wir uns, ob es praktikabel ist, eine Lösung zu programmieren.

Meine Frage: Kann man bestehende WorkItem Types programmatisch anpassen? Bietet die TFS API Möglichkeiten dazu, die Regeln für "Allowed Values" eines DropDowns zu ändern? Wenn ja, müsste man dann auch sämtliche bestehendenden WorkItems anpassen oder reicht es, wenn man nur den WorkItem Type anpasst?

Ich hoffe, ich hab mich nicht zu kompliziert ausgedrückt.

Vielen Dank schon einmal im Voraus.

Edward

12.11.2010 - 11:33 Uhr

Hallo JAck30lena,

danke dür den Tipp. Das hat mich gut weitergebracht 😃

Vg,
Edward

12.11.2010 - 10:22 Uhr

Hallo zusammen,

das Thema Drag 'n Drop wurde hier ja schon zuhauf behandelt. Allerdings konnte mir nichts davon helfen.

Ich habe zwei ListBoxen (eine links "ToDo-Listen" und eine rechts, in der die einzelnen ToDo's der links ausgewählten Liste angezeigt werden).
Beide ListBoxen sind an eine Collection gebunden. Jetzt möchte ich ein ToDo (aus der rechten Liste) in eine andere ToDoListe (repräsentiert durch ein ListBoxItem in der "ToTo-Listen" - ListBox) verschieben können.

Das "Anfassen" und "Ziehen" des Elements, das verschoben werden soll, klappt schon. Es kommt auch beim DragEnter der Ziel-ListBox an.

Allerdings muss ich ja jetzt noch herausfinden, über welchem Element der Zielliste sich der Mauscursor beim "Droppen" befindet, um so das genaue Ziel ausmachen zu können. Ich bin bei meiner Suche auf die Methode "PointFromScreen" gestoßen, weiß allerdings nicht, ob das ein Ansatz ist, der sich weiter zu verfolgen lohnt.

Hab zum besseren Verständnis mal einen Screenshot beigefügt.

Hat jemand da einen Tipp für mich?

Vielen Dank schon einmal im Voraus.

Edward

11.11.2010 - 07:42 Uhr

Hallo zero_x,

leider ist das nicht ganz das, was ich brauche. Bei dir handelte es sich um bereits existierende ListBoxItems, die bei einem Klick auf den innenliegenden Button fokussiert werden sollten.
Bei mir wird per Programmcode ein Object zu einer ObservableCollection hinzugefügt. Da die an die ListBox gebunden ist wird die ListBox sofort aktualisiert - also das neue Objekt als ListBoxItem hinzugefügt. Und genau in diesem Moment soll programmatisch ein Textfeld, das sich innerhalb des neuen ListBoxItems befindet, den Fokus erhalten.

Der Hintergrund ist folgender: per Kontextmenü kann der Anwender der Liste ein neues Objekt hinzufügen. Damit er nun aber nicht extra noch in das Textfeld klicken muss sondern gleich lostippen kann soll der Fokus beim neu angelegten Element gleich in der Textbox stehen.

Geht das irgendwie?

Viele Grüße,
Edward

10.11.2010 - 12:50 Uhr

Hallo zusammen.

Der Thread-Titel sollte eigentlich schon alles sagen: ich habe eine ListBox die an eine ObservableCollection<> gebunden ist. Das DataTemplate der ListBox beinhaltet u.a. eine TextBox in der ein String aus dem gebundenen Objekt angezeigt wird (TwoWay Binding).

Wird der Liste ein neues Element hinzugefügt würde ich gerne den Fokus auf die TextBox des neuen Items setzen. Zur Design-Zeit kann ich darauf "hard coded" ja nicht zugreifen, da die Elemente erst zur Laufzeit erzeugt werden.

Hat jemand einen Tipp für mich?

Vielen Dank schon einmal im Voraus.

Edward

30.07.2010 - 09:48 Uhr

Hallo Digi,

in einem unserer alten Projekte wurde es so gelöst, dass eine Clone() Methode implementiert wurde, die ein übergebenes Objekt Property für Property kopiert und eine komplett neue Instanz zurück liefert.

Vielleicht ist das ja ein Ansatz.

Gruß,
Edward

30.07.2010 - 09:39 Uhr

Jaaa jaa grins 😜 😉

Eine Frage hätte ich da aber noch... ich habe die Config der DLL (also die ANWENDUNGSKONFIGURATIONSDATEI) verändert... aber das wirkt sich nicht auf das Programm aus.
Gibt es irgendwo eine Art Cache, der vielleicht geleert werden müsste?

Gruß,
Edward

29.07.2010 - 13:47 Uhr

Hei ei ei... das klingt nach einem ziemlich kranken Hack... genau das richtige für mich 😁

Mal sehen, wann ich dazu kommen werde, aber ich werde es auf jeden Fall mal ausprobieren.

29.07.2010 - 13:46 Uhr

Er fand seltsam, dass die Konfigurationsdatei nicht mitkopiert wurde. 🙂

Rischtisch 😁

29.07.2010 - 13:26 Uhr

Die Suchfunktion hat's gerissen...
Seltsamerweise wurde die kompilierte DLL in das Verzeichnis kopiert, in dem die EXE liegt, von der sie benutzt wird.
Die entsprechende "DLL-Config" jedoch lag nur im Erstellungsordner des Projekts....

Ich danke auch =)

29.07.2010 - 13:16 Uhr

Hallo "Gü",

ich hab mir das Tutorial angeschaut.
Die Inhalte der Settings sollen ja nicht vom Programm aus geändert werden können, sondern per Hand (also direkt in der Config).
Das Programm sieht derzeit keinerlei Möglichkeiten vor, irgendwelche Einstellungen zu verwalten und einen derartigen Mechanismus zu implementieren, nur um eine Konfiguration auszulesen, die vielleicht alle paar Monate mal etwas erweitert wird (wenn überhaupt), wird niemand befürworten.

Eine Mehrbenutzerfähigkeit wird ebenso wenig benötigt.

Irgendwo muss sich die Applikation doch die anwendungsweit gültigen (Default-)Settings "merken"...

Gruß,
Edward

29.07.2010 - 12:28 Uhr

Hallo Michael,

bei mir (hatte vergessen, zu erwähnen, dass ich VS 2010 auf Windows Server 2003 benutze, sorry) liegen zwar auch ein paar user.config Files im Profilordner rum... aber zum einen sind die leer (bzw. enthalten nur eine leere ConfigSection) und zum anderen müssten die doch irgendwo liegen, wo die Anwendung user-unabhängig heran kommen müsste, da ich die Settings mit dem Scope "Application" erstellt habe.

Gruß,
Edward

29.07.2010 - 12:10 Uhr

Hallo zusammen.

Ich bin gerade dabei, ein kleines Tool unserer Firma von hart codierten "Einstellungen" auf leichter wartbare Settings umzustellen.
Das Auslesen der Werte (via Settings.Default.SettingName) funktioniert auch einwandfrei.
Die Werte werden auch in der App.config abgelegt (bzieht sich auf ein DLL Projekt).
Da diese Einstellungen aber auch nach dem Verteilen der Anwendung veränderbar sein sollen, wollte ich das mal testen... kann sie aber nirgends finden...

Weiß jemand, wo die Settings (die sich ja, wie bereits erwähnt, in der App.config des DLL Projekts befinden) abgelegt werden?

Vielen Dank schon einmal im Voraus.
Edward

28.07.2010 - 08:33 Uhr

Sind denn nicht alle Softwareideen irgendwo krank? 😉

28.07.2010 - 07:46 Uhr

Hmmm... würde das Ausblenden der Taskleiste und das maximieren dieses Dialogs denn auch das Umswitchen zwischen offenen Anwendungen via ALT + TAB verhindern? Abgesehen davon, dass es wahrscheinlich ziemlich "krank" aussähe, wenn so ein winziger Dialog (hat ja nur eine Textbox und zwei Buttons) den gesamten Bildschirm füllen würde.

Es gab doch unter Windows XP auch so ein "Feature"... und zwar, wenn man den PC herunterfahren wollte. Da wurde doch auch der ganze Rest gesperrt und nur der Shut Down Dialog war noch bedienbar. Der Zielrechner ist übrigens (vorerst) eine XP (Home) Maschine. Kann man sich dessen nicht irgendwie über eine API Funktion bedienen?

27.07.2010 - 16:06 Uhr

Hallo zusammen,

ich möchte gerne ein kleines Tool bauen, das ein paar Ordner überwacht und bei einem Zugriff darauf ein kleines Dialogform anzeigt, in dem ein Passwort eingegeben werden muss.
Wäre ja an sich nicht das Problem... jedoch sollte das Auftauchen dieser Passwort-Box eine weitere Benutzung des restlichen Systems verhindern, bis sie wieder geschlossen wird (egal ob über OK oder Abbrechen).
Ich bräuchte also so etwas wie eine Möglichkeit, ein Dialogfenster "systemmodal" anzeigen zu können.

Vielen Dank schon einmal im Voraus.

Eddie

22.06.2010 - 14:29 Uhr

Wieso lässt du das ViewModel nicht entsprechende Liste bereit stellen auf die du binden kannst und die bei Änderung des Flags aktualisiert werden?

Ich verwende nicht das MVVM Pattern...

Was Du möchtest ist "Filtern". Ich selber habe es noch nicht verwendet, aber ich denke eine ListCollectionView wäre das richtige für Dich.

Danke. Die werd ich mir mal anschauen. 🙂

22.06.2010 - 13:53 Uhr

Hallo Jéré,

ich möchte die Elemente ja nicht sortieren sondern an Hand eines Flags bestimmen, ob sie überhaupt in den Listen auftauchen dürfen. Da ich die Daten komplett per DataBinding anzeigen lasse (keine ListBox wird manuell gefüllt) und noch ein Novize in puncto WPF und dessen DataBinding Mechanismen bin frage ich mich, ob ich auch per XAML festlegen kann, dass Elemente - die bestimmte Kriterien erfüllen - nicht in den Listen auftauchen dürfen.

Gruß,
Eddie

22.06.2010 - 13:31 Uhr

Hallo zusammen,

ich habe auf meinem WPF (Windows-Anwendung) GUI mehrere ListBoxen die per DataBinding an Listen gebunden sind.
Nun möchte ich gerne, dass bestimmte Elemente wahlweise ein- oder ausgeblendet werden können.

Konkret: Ich habe zwei ListBoxen über die sich eine CheckBox befindet mit der der Benutzer steuern kann, ob auch gelöschte Elemente angezeigt werden sollen oder nicht. Jetzt möchte ich gerne je nach Zustand der CheckBox die als gelöscht markierten Elemente ein- bzw. ausblenden.

Hat jemand einen Tipp, wie ich das machen kann?
Geht das auch so wunderprächtig via DataTemplates oder muss ich die Listen dann schon per Hand füllen?

Vielen Dank schon einmal vorab.

Eddie

21.06.2010 - 16:45 Uhr

Hallo SeboStone,

doch. Ich referenziere mein DLL Projekt als Projektreferenz. Alle Projekte (4 an der Zahl: 3 DLL- und 1 WPF Windows Projekt) befinden sich alle in einer Solution.

21.06.2010 - 14:17 Uhr

Hallo Herbivore,

würde ich eigentlich auch.
Jetzt wird's aber richtig seltsam... Das VS sagt mir, ich muss eine Referenz auf "System" einfügen, weil INotifyPropertyChanged dort definiert sei.
Kurioserweise kennt das Studio dieses Interface an genau der selben Stelle jedoch bereits. Ich hab da mal 'nen Screenshot von gemacht.

Kommt dir das nicht auch seltsam vor?

Eddie

21.06.2010 - 13:14 Uhr

Hallo Herbivore,

da hänge ich jetzt aber in einer Zwickmühle...
Der Compiler sagt mir, ich müsse Referenzen auf die System.dll Version 2.0.5.0 setzen. Ich habe ein DLL Projekt in dem ich ein vom Designer generiertes DataSet verwende. Ersetze ich nun die vorhandene Referenz auf eine System.dll (Version 2.0.0.0) mit der vom Compiler geforderten kommt es zu 133 anderen Compilerfehlern, die vom DataSet ausgelöst werden...

Kann es denn angehen, dass für das INotifyPropertyChanged, bzw. für INotifyCollectionChanged, eine andere Version der System.dll benötigt wird als für die ObservableCollection?

21.06.2010 - 10:51 Uhr

Hallo zusammen.

Ich baue mir gerade eine kleine WPF Anwendung, die ich aus mehreren Schichten aufbaue. In meinem DLL Projekt, welches meine Geschäftsobjekte beinhaltet, befinden sich Collections, die von ObservableCollection<T> ableiten.

Seltsamerweise bekomme ich jetzt in jedem anderen Projekt, das diese abgeleiteten Collections auch nur entfernt verwendet, folgende Fehlermeldung des Compilers:

The type 'System.Collections.Specialized.INotifyCollectionChanged' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.

Diese Meldung erhalte ich z.B. auch an solchen Stellen (Auszug aus dem prozeduralen Code meiner XAML GUI):


private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.gridMain.DataContext = BusinessComponent.Instance.Listen; // Hier meckert der Compiler
}

Wie man sieht wird eine meiner abgeleiteten Collections hier lediglich benutzt (die Klasse BusinessComponent befindet sich in einem anderen Projekt) und doch mault der Compiler, ich müsse eine Referenz setzen.
Mache ich das (auf System.Windows.dll) ist er immer noch nicht zufrieden und erzählt mir, die Klasse "Application" währe jetzt in mehren Assemblies definiert.

Irgendwie blick ich da nicht durch... ich will doch einfach nur eine ObservableCollection<T> verwenden, damit sich meine GUI via DataBinding automatisch aktualisiert. Spinnt da mein Visual Studio oder mach ich etwas grundlegendes falsch?

Achja... genau das selbe Problem habe ich übrigens, wenn ich versuche, das Interface INotifyCollectionChanged per Hand zu implementieren...

Ich danke euch schon mal vorab.

Viele Grüße,
Eddie

16.06.2010 - 14:20 Uhr

*lach*
Ein paar Wochen hab ich leider nicht 😉

Aber danke euch 😃