Laden...
J
jogibear9988 myCSharp.de - Member
Programmierer Offenau Dabei seit 17.07.2007 641 Beiträge
Benutzerbeschreibung

Forenbeiträge von jogibear9988 Ingesamt 641 Beiträge

16.03.2014 - 21:34 Uhr

Mit von "Window" abgeleiteten Controls gibts Probleme da der XAML Designer Window Controls durch WindowClone ersetzt da in WPF keine Window Instanz in einem Fenster geöffnet werden kann...

Dann findet der Designer natürlich auch manche Properties nicht...

Morgen schau Ich mirs aber mal an...

16.03.2014 - 21:15 Uhr

Ohne Code kann Ich dir zumindest nichts zu dem Fehler sagen...

16.03.2014 - 11:42 Uhr

Wir nutzen für unsere Visualisierung den Designer von SharpDevelop, da können dann XAML Oberflächen erstellt werden, diese werden dann in einer Datenbank gespeichert.

3rd Party Librarys und Bindings gehen ohne Probleme.

Bei uns können dann noch Scripte zusammengeklickt werden, diese werden in einer Extra Tabelle gespeichert. Nach dem Laden der Oberfläche werden die Scripte dann noch mit den Controls verbunden...

Bei SharpDevelop ist da auch ein Tolles Beispiel dabei: icsharpcode / SharpDevelop / samples / XamlDesigner

24.01.2014 - 01:30 Uhr

Vieleicht kannst du Avalonedit verwenden? Der unterstützt auch die Rechteck selektion. : AvalonEdit 4.2: Virtual Space

22.01.2014 - 06:48 Uhr

Scheint so, als ob der DataContext für InpuBindings nicht wirke, hier das gleiche Problem+Lösung:KeyBinding - RelayCommand is in xaml.cs und hier auch nochmal was dazu Binding support in InputBindings

11.01.2014 - 13:19 Uhr

Sieht ganz gut aus...

Wer das ganze in WPF möchte, hier bieten sich das XamlDesigner Projekt von Sharp Develop an:
GitHub XamlDesigner

17.12.2013 - 23:54 Uhr

Wie wärs mit object als einschränkung für den generic? Object kann immer null sein!

25.11.2013 - 23:26 Uhr

Welches .Net Framework verwendest du denn?

.NET 4.0 oder größer? Dann d´brauchst du für das Calendar Control kein Toolkit mehr (da ist das Control schon im Framework)!
Ich hab dir das Projekt mal angepasst, das es mit .NET 4.0 läuft!

Falls du unter 4.0 doch noch parts aus dem Toolkit brauchst, Ich hab einen Fork auf GitHub erstellt, in dem die in Net4.0 enthalten Controls entfernt wurden. Auch hab Ich die DataVisualisation Controls auf die Version im Silverlight Toolkt hochgezogen. Die Version gibts hier: https://github.com/jogibear9988/wpftoolkit

12.10.2013 - 21:07 Uhr

Dies geschieht im Aufruf-Thread, sofern der Aufruf-Thread dies ermöglicht. Das ist normalerweise bei GUI-Threads der Fall, bei anderen Thread normalerweise nicht.

dann brauche Ich doch das ConfigureAwait(false) in Service Anwendungen nicht (weil gfoidl das geschrieben hat).Das brauch Ich doch dann eher wenn Ich es in der GUI unterbinden will, oder?

10.10.2013 - 06:45 Uhr

Ich kenne mich mit der Sprachausgabe nicht aus, denke aber dein problem wird sein, das dein Programm nach deinem letzten Befehl sofort beendet wird. Füg da mal als letzte Zeile Console.ReadLine(); ein.

16.09.2013 - 21:27 Uhr

Mit https://github.com/MrCircuit/XAMLMarkupExtensions gehen nested markupnextensions, ob dir das bei deinem problem hilft, musst selbst nachschaun...

17.08.2013 - 08:53 Uhr

lass mal das INotifyProperty Changed weg, das nutzt man nicht bei Dependecy Properties (geht nicht) und Registrier dein CallBack in dn Property Metadaten!
http://msdn.microsoft.com/en-us/library/ms745795.aspx#Coerce_Value_Callbacks_and_Property_Changed_Events

05.06.2013 - 09:39 Uhr

wenn ich das richtig verstehe, würdest du gerne bei der DataRow eine MaxHeigth verwenden, welche dann auch relativ zur größe des Grids können sein sollte?

17.05.2013 - 11:17 Uhr

Hallo, Ich habe eine besthende Software welche mit Silverlight über WCF TCP/IP Duplex Kommuniziert.

Nun habe Ich vor (wenn das möglich ist) den Server möglichst unangetastet zu lassen, und auf WCF Websockets umzustellen um HTML Clients zu ermöglichen.

Jetzt finde Ich aber im Internet keine gescheiten Beispiele, wie Ich von Javascript aus eine in einem Interface definierte Funktion aufrufe! Geht das überhaupt? Wenn ja wie?

09.04.2013 - 09:24 Uhr

Ich möchte LINQ Expressions über WCF ohne die WCF Dataservices benutzen.

Habe dazu folgende Projekte gefunden:

https://expressiontree.codeplex.com/

https://interlinq.codeplex.com/

https://github.com/esskar/Serialize.Linq

aber die scheinen alle nicht mehr gepflegt zu werden.

Kann mir jemand denn eines empfehlen, wozu es auch gute Beispiele gibt?

30.03.2013 - 09:44 Uhr

Was ist den var_liste für eine liste? List<T> oder eine observable collection.
Ich dachte auch mal an einnreverse, das hast du ja aber schon versucht, aber falls du das LinQ Reverse benutzt musst du ja den Rückgabewert zuweisen. Daher die frage nach dem typ von der liste...

24.02.2013 - 18:23 Uhr

Geht nicht, auch wenn Ich die NewRow() im UI Thread aufrufe!

23.02.2013 - 20:08 Uhr

Kein Plan warum das bei dir nicht geht.

Ich denk mal aber das Notpad es vielleicht auch als Bild druckt, da dein Drucker diese Schriftart gar nicht kann?

Aber du kannst auch diese Bibliothek verwenden: http://barcoderender.codeplex.com/ da brauchst du keinen Barcode Font, damit musst du es aber als Bild drucken!

20.02.2013 - 09:02 Uhr

verwendetes Datenbanksystem: MsSQL

Hab mir folgenden Code gebaut:


    public static void Update<T>(ISession Session, Expression<Func<T, object>> Property, object NewValue, Expression<Func<T, bool>> Condition)
        {
            ITransaction newTransaction = null;
            if (Session.Transaction == null)
                newTransaction = Session.BeginTransaction();

            var entities = Session.Query<T>().Where(Condition);

            var memberExpression = (MemberExpression)Property.Body;
            var property = (PropertyInfo)memberExpression.Member;

            foreach (var entity in entities)
            {
                property.SetValue(entity, NewValue, null);
                Session.Update(entity);
            }
            if (newTransaction != null)
            {
                newTransaction.Commit();
                newTransaction.Dispose();
            }
        }

Dadurch kann ich nun per Linq so Elemente Update:
session.Update<TagDTO>(itm => itm.Connection, "CC", itm => itm.Connection == "AA");

Nun möchte Ich aber das NHibernate nicht immer alle Entities vorher ließt, sondern direkt ein SQL Update an die Datenbank gemacht wird! Ist das irgendwie möglich...

19.02.2013 - 19:36 Uhr

Kommt drauf an.

Auf was? Wenn Ich z.B eine observablecollection habe, muss ich ja auch nur das add im UI Thread machen, das erzeugen des elements geht auch ausserhalb!
Oder ist das bei Datatable anderst?

19.02.2013 - 19:34 Uhr

Das weis ich schon mit den Resourcen. Es soll bei uns aber Datenbankgebunden sein, da es auch Texte gibt die der Kunde anlegen kann. Wollte auch nur zeigen, das man durch dieses Behavior, nicht jeden Text mit StaticResource an eine Resource binden muss, sondern so automatisch alle Textboxen übersetzt werden!

19.02.2013 - 11:42 Uhr

Und das newRow hast du wie erzeugt?

Wegen was ist das wichtig? muss das auch im GUI Thread stattfinden???

19.02.2013 - 07:42 Uhr

Im Moment mach Ich das so: this.dispatcher.Invoke(new Action(() => LastDatasets.Rows.InsertAt(newRow, 0)), null);

wobei dispatcher der GUI Dispatcher ist!

Habs mit merge auch schon so probiert! Hat nicht geklappt!

18.02.2013 - 18:44 Uhr

verwendetes Datenbanksystem: MySQL.

Hallo, ich habe folgendes Problem: Ich lese Daten aus eine MySQL Tabelle ein um Sie in einem DataGrid anzuzeigen. Da ich nicht weis wie die Tabelle aufgebaut ist, lese Ich die Daten in eine DataTable. Diese DataTable habe Ich an ein DataGrid in WPF gebunden. Wenn nun in der datenbank neue Daten hinzukommen, möchte Ich diese im DataGrid anzeigen.

Wenn ich dazu eine neues DataTable auslese und dem dataGrid zuweise funktioniert das auch. Dies hat aber ein vollständiges neuzeichnen des Grids zur folge => langsam!

Daher würde ich gerne die alte DataTable um die neuen Daten erweitern und anzeigen. Ich hab dazu schon dataTable.merge benutzt, oder auch mit add die neuen Rows hinzugefügt. Mit dem ergebnis das die Daten nicht angezeugt werden. Erst wenn ich die DefaultView der Datatable mit Refresh erneuere werden die Daten angezeigt (was aber auch ein komplettes neuzeichnen des Grids zur folge hat).

Gibts denn dafür keine Möglichkeit???

18.02.2013 - 10:12 Uhr

Sorry...

Habs hinbekommen:


 var aa = "Hallo wie{0}geht es dir {1}";
            var parts = Regex.Split(aa, "(?=\\{)|(?<=\\})");

18.02.2013 - 10:09 Uhr

Hallo, Ich versuche den String "Hallo wie{0}geht es dir {1}" in 4 Teile zu Zerlegen: "Hallo wie", "{0}", "geht es dir ", "{1}". Kann mir da einer weiterhelfen? Sollte natürlich bis 0-9 möglich sein!

Ich bekomm den RegEx dafür nicht hin. Er zerlegt Ihn mir schon, aber dann sind immer die {} werte nicht dabei 😦

16.02.2013 - 12:49 Uhr

Wie handelt Ihr das mit der Internationalisierung von euren Applikationen?

Ich habe das bei meiner neusten jetzt so gemacht:

Ich habe ein Behavior gebaut, TextTranslate Behavior:


public sealed class TextTranslateBehavior : Behavior<FrameworkElement>, ICloneableBehavior
    {
        protected override void OnAttached()
        {
            base.OnAttached();

            var tb = AssociatedObject as TextBlock;
            if (tb != null)
            {
                var bnd = I18n.TranslateToBinding(tb.Text);
                if (bnd != null) tb.SetBinding(TextBlock.TextProperty, bnd);
            }
        }

        public object CloneBehavior()
        {
            return new TextTranslateBehavior();
        }
    }

diese Implementiert dieses Interface:


public interface ICloneableBehavior
    {
        object CloneBehavior();
    }

und dann gibts dazu noch diese Klasse:


public class StylizedBehaviorCollection : Collection<Behavior>
    { }

    /// <summary>
    /// Helper Class to apply Behaviors via a Style.
    /// But the Behavior has to implement ICloneableBehavior!
    /// </summary>
    public class StylizedBehaviors
    {
        #region Fields (public)
        public static readonly DependencyProperty BehaviorsProperty = DependencyProperty.RegisterAttached(
            @"Behaviors",
            typeof(StylizedBehaviorCollection),
            typeof(StylizedBehaviors),
            new PropertyMetadata(null, OnPropertyChanged));
        #endregion
        #region Static Methods (public)
        public static StylizedBehaviorCollection GetBehaviors(DependencyObject uie)
        {
            return (StylizedBehaviorCollection)uie.GetValue(BehaviorsProperty);
        }

        public static void SetBehaviors(DependencyObject uie, StylizedBehaviorCollection value)
        {
            uie.SetValue(BehaviorsProperty, value);
        }
        #endregion

        #region Static Methods (private)
        private static void OnPropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e)
        {
            var uie = dpo as UIElement;

            if (uie == null)
            {
                return;
            }

            BehaviorCollection itemBehaviors = Interaction.GetBehaviors(uie);

            var newBehaviors = e.NewValue as StylizedBehaviorCollection;
            var oldBehaviors = e.OldValue as StylizedBehaviorCollection;

            if (newBehaviors == oldBehaviors)
            {
                return;
            }

            if (oldBehaviors != null)
            {
                foreach (var behavior in oldBehaviors)
                {
                    int index = itemBehaviors.IndexOf(behavior);

                    if (index >= 0)
                    {
                        itemBehaviors.RemoveAt(index);
                    }
                }
            }

            if (newBehaviors != null)
            {
                foreach (var behavior in newBehaviors)
                {
                    int index = itemBehaviors.IndexOf(behavior);

                    if (index < 0)
                    {
                        if (behavior is ICloneableBehavior)
                        {
                            itemBehaviors.Add((Behavior) ((ICloneableBehavior) behavior).CloneBehavior());
                        }
                        else
                        {
                            throw new NotImplementedException("Behavior does not implement ICloneableBehavior");
                        }
                    }
                }
            }
        }
        #endregion
    }

damit kann ich in der App.xaml jede TextBlock ein Behavior zuweisen:


 <Style TargetType="TextBlock">
                        <Setter Property="Behaviors:StylizedBehaviors.Behaviors">
                            <Setter.Value>
                                <Behaviors:StylizedBehaviorCollection>
                                    <Behaviors:TextTranslateBehavior />
                                </Behaviors:StylizedBehaviorCollection>
                            </Setter.Value>
                        </Setter>
                    </Style>

dadurch werden jetzt automatisch alle TextBlöcke welche Ich verwende übersetzt! (Von der I18n Klasse welche in dem Bevaior verwendet wird!). Sieht da jemand Probleme ? Performance? oder andere Kritische Meinungen?

09.02.2013 - 09:30 Uhr

Ok, dann beschreib Ich mal mein Vorgehen:

In meinem Xaml lege Ich mir im Datacontext ein Objekt an, welches Zugriff auf meinen Visu Server hat:


 <UserControl.DataContext>
        <visu:VisuClientStaticFix />
    </UserControl.DataContext>

dann kann Ich z.B. in einem TextBlock den Text so an eine Server Varible Binden:


<TextBlock Text="{Binding Instance.TagClient.Tags.server.TestBB.Value}" />

das gute an der Sache ist nun, das Objekt TagClient.Tags hat gar nciht die Property "server" oder der "server" die Property TestBB. Die sind alle vom Typ TagFolder, welcher ein DynamicObject ist, und somit die Propertys zur Laufzeit erzeugt werden. (Damit Databinding funktiniert, implementiert der Typ auch noch INotifypropertyChanged (und unter Silverligt noch ICustomTypeProvider, unter WPF geht das Binding auch schon so!).

Nun kommt an den Client per ServerCallback eine Liste von geänderten werden:


public class TagValueWrapperDTO 
    {
        public string Name { get; set; }
        public object Value { get; set; }
        public TagValueQuality TagValueQuality { get; set; }      
    }   

der durchsucht seine Liste von Tag Objekten, weist diesen die neuen Werte zu.

Hoffe so kann man meinen Ansatz einigermaßen verstehen.

02.02.2013 - 02:52 Uhr

wie wärs mit override metadata, und dann die selected item property mit einem callback ausstatten?
oder ein neues behavior erstellen, in dem kannst du auf jede combobox instanz zugreifen und dich an die evebts hängen. dieses behavior weist du dann im style allen comboboxen zu!

02.02.2013 - 02:48 Uhr

klar geht das, du kannst ja eine duplex verbindung aufbauen.
ich erzeug mit halt mein objekt mit propertys für jeden tag dynamisch. sogar mit unterpropertys. da kannst du dann z.b. so binden: {binding tagclient.tags.rbg.speed} wobei das objekt tags zur laufzeit erstellt wird!

01.02.2013 - 00:23 Uhr

Warum machst du dir auf dem Client nicht ein Objekt welches den Wert repräsentiert (bei mir ist das das Tag Objekt). Dieses Implementiert INotifyPropertyChanged, und du Bindest die Propertys welche sich bei bei Änderung ändern sollen, an eine Property des Tag Objekts?

30.01.2013 - 21:07 Uhr

Also Ich kann dir jetzt nicht direkt zu deinem Problem was schreiben, aber Ich kann dir schreiben wie Ich im groben unser Visualisierungsystem aufgebaut habe.

Bei mir gibt es auf den Server und im Client Klassen des Typs Tag (Sind verschiedene aber ein Tag repräsentiert einen SpsWert). In der Silverlight oberfläche sind z.B. textbox.Text oder Backcolor eines elements an ein Tag objekt gebunden. Dadurch stelle ich beim öffnen eines bildes fest welcher tag vom server gelesen werden soll (tag implementiert inotifypropertychanged, und beim anfügen an das event wird dem server gesagt, das diese variable nun in die leseliste soll.)

Der Server liest nun die tags von der sps (immer zyklisch). Wenn sich ein Tag ändert, wird das in eine sendeliste an den client eingetragen, welche alle 50ms per callback an die clients (wpf und silverlight geschickt wird). Im client wird der wert nun dem tag objekt zugewiesen, und da die felder und farben gebunden sind werden diese aktualisiert!

30.01.2013 - 20:58 Uhr

Zur Kommunikation mit S7 gibts von mir die SiemensPlcToolboxLib (http://siemensplctoolboxlib.codeplex.com/). Darin gibts Ydann auch eine Klasse PlcTag<T> welche den Value Typsicher anbietet!

27.01.2013 - 00:15 Uhr

Das Window an sein eigenes CodeBehind binden ist sowas von Anti-MVVM

Das mag ja sein, aber ist den MVVM immer nötig? Für jedes noch so kleine Tool MVVM, für strikte trennung von Gui und Code zu fordern halte Ich für Schwachsinn...

21.01.2013 - 21:04 Uhr

Wenn ich bei einem Timer aus System.Threading, Change aufrufe (z.b. mit (20,Infinite)), wird dieser dann neu gestartet? wenn z.b: schon 10ms rum sind, dauerts dann nur noch 10ms oder wieder 20? Und wenn er gerade während des Change aufrufs in dem TimerEvent ist, wird er danach nochmal gestartet?

19.01.2013 - 18:07 Uhr

Hab folgenden code:


var bind = new PollingDuplexHttpBinding();
                bind.MaxReceivedMessageSize = 2147483647;

                EndpointAddress myEndpoint = new EndpointAddress(address);

                try
                {
                    var instContext = new InstanceContext(this);
                    var fact = new DuplexChannelFactory<IVisuWcfService>(instContext, bind);
                   var channel = fact.CreateChannel(myEndpoint);
                    this.visuServices.Add(visuService.Name, channel);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message+ex.StackTrace);
                }

das try / catch habe Ich im Moment nur geschwind als hack für den Designer eingebaut.

So nun das ganze:
Ich Hab diese Klasse in meinem DataContext, d.h. es wird zur Designzeit ein Objekt davon erzeugt. Dann bekomme Ich aber folgenden fehler:> Fehlermeldung:

Unable to cast object of type 'proxy_xx' to type IVisuWcfService wobei xx eine immer weiter steigende Nummer ist. Der Fehler tritt in der Zeile:

var channel = fact.CreateChannel(myEndpoint);

auf.
Wenn Ich das ganze starte, dann funktionierts!

Irgendwelche Ideen?

15.01.2013 - 23:36 Uhr

Wenn du die Labels eh im Code Behind erzeugst, warum willst du dann überhaupt noch an die Werte Binden, und weist nicht gleich den Wert deiner Property zu?

Ich würde eher die Liste an ein ListControl Binden. Du kannst dort auch ein Grid als ItemsContainer verwenden. siehe: http://stackoverflow.com/questions/2391251/using-a-grid-as-the-itemspanel-for-an-itemscontrol-in-silverlight-3

09.01.2013 - 10:06 Uhr

Wenn du die .Net Settings verwendest, werden bei einer neuen version immer die default Settings geladen.
Falls du die alten weiterverwenden willst, musst du diese über Upgrade importieren:

Ich habe das z.B. so:


if (!myApp.Properties.Settings.Default.Upgraded)
            {
                myApp.Properties.Settings.Default.Upgrade();
                myApp.Properties.Settings.Default.Upgraded = true;
                myApp.Properties.Settings.Default.Save();
            }

18.12.2012 - 01:41 Uhr

Wie auslesen ? Also die typenfos auslesen oder die Typen benutzen? Ersteres sollte mit Cecil gehen!

16.12.2012 - 10:41 Uhr

Äh... Nein. Ich habe ein selbst geschriebenes Control. Und Ich will VisualStudio Designer unterstützung hinzufügen.
Ich kann z.B. eine Property FileName hinzufügen, und im Designer einen Butten bei der Property anzeigen, wodurch man dann einen OpenFileDialog bekommt. Das grieg ich hin. Aber nun will ich keinen Button, sondern eine Liste der Resourcen in der Assembly (also genau wie beim Image Control). Will nun wissen, muss Ich das selbst programmieren? (wenn ja, wie komm ich an diese liste (wohlgemerkt im design modus)) oder gbts vielleicht ein attribut?

14.12.2012 - 14:52 Uhr

Gibt es einen fertigen ValueEditor, der es erlaubt eine Resource auszuwählen?

So wie beim ImageControl -> ImageSource!

14.12.2012 - 12:25 Uhr

Suche eine Bibliothe um mir eine Formel welche Ich als Textzeile schreibe: z.B. : E=m*c^2 in MathML umzuwandeln! Gibts so was in CSharp schon?