Laden...
Avatar #avatar-2329.gif
xxxprod myCSharp.de - Experte
Programmierer Österreich\Wien Dabei seit 13.04.2006 1.378 Beiträge
Benutzerbeschreibung

Forenbeiträge von xxxprod Ingesamt 1.378 Beiträge

18.02.2011 - 12:15 Uhr

Ohne fundiertes Wissen würde ich behaupten, dass sie immer der Reihenfolge durchlaufen werden, wie sie hinzugefügt wurden. Wenn du also der letzte warst der einen Eventhandler hinzugefügt hat, wirst du auch der letzte sein der aufgerufen wird.

Lg XXX

//EDIT: Multicast Delegate Internals bestätigt das in etwa unter "Sequential Invocation".

18.02.2011 - 11:13 Uhr

Keine anzuratende Variante und auch viel zu umständlich, trotzdem wollt ichs erwähnen:

Du könntest dein Fenster aus deiner externen Assembly in eine eigene AppDomain laden, die du dann bei nicht verwenden am Ende zerstörst. (Brechstangenvorgehen) 😃

Lg XXX

PS: Ich sehe keine Möglichkeit ein Fenster sauber zu schließen wenn es sich nicht schließen lassen will. (Was hat sich der entsprechende Entwickler dabei gedacht?)

17.02.2011 - 15:04 Uhr

Das geht aber nur mit den Objekten die bereits geladen wurden. Wenn sich in der Datenbank neue Objekte befinden oder gar gelöscht wurden, dann bleibt nichts anderes übrig als die ursprüngliche Abfrage erneut auszuführen.

Lg XXX

17.02.2011 - 14:50 Uhr

Anhand welcher Kriterien sollen sich die ListItems verfärben? Soll sich das Item anhand des Wertes verfärben, dann hilft dir dabei ein IValueConverter gebunden an das Background Property.

Lg XXX

17.02.2011 - 12:24 Uhr

Ich frage mich nur warum du ihn Zeichnen willst, wenn dir Label die Funktionalität schon von haus aus bietet aber gut.

Zum selber zeichnen musst du in der OnPaint Methode die Graphics.DrawString Methode verwenden und dort kannst du verschiedenste Sachen einstellen wie das Rechteck in das gezeichnet werden darf (Begrenzungen) oder wie sich der Text bei Überlänge verhalten soll.

Lg XXX

17.02.2011 - 12:19 Uhr

Was spricht gegen Binding.StringFormat?

Lg XXX

14.02.2011 - 14:04 Uhr

Guter Hinweis. So hab ich früher auch komplexe Daten deployed: Falls die Datenbanken auf unterschiedlichen System liegen, einfach ein Backup von der Quelldatenbank machen, am Zielserver einspielen und schon kann man bequem mit Selects und Inserts arbeiten.

Lg XXX

14.02.2011 - 11:47 Uhr

Schau dir mal Bulk Insert an.

Lg XXX

14.02.2011 - 11:09 Uhr

Ich habs gerade nochmal getestet und anscheinend kann man keine Properties per Style überschreiben, wenn sie direkt gesetzt wurden. Das heißt, das Standardimage muss per Style gesetzt werden dann sollte es funktionieren:

<CheckBox Name="cbxPlanning" DockPanel.Dock="Right" VerticalAlignment="Center" />
<Image DockPanel.Dock="Right" Height="16" Width="16">
    <Image.Style>
        <Style>
            <Setter Property="Source" Value="/Resources/Images/flag_yellow_16.png"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=cbxPlanning, Path=IsChecked}" Value="True">
                    <Setter Property="Source" Value="/Resources/Images/flag_green_16.png"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>

Lg XXX

11.02.2011 - 19:01 Uhr

DataTrigger ist hier das Werkzeug deiner Wahl.


        <CheckBox Name="cbx" DockPanel.Dock="Right" VerticalAlignment="Center" />

        <Image DockPanel.Dock="Right" Source="/Resources/Images/flag_yellow_16.png" Height="16" Width="16">
            <Image.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger  Binding="{Binding ElementName=cbx, Path=IsChecked}" Value="True">
                            <Setter Property="Source" Value="/Resources/Images/flag_green_16.png"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>

Lg XXX

11.02.2011 - 16:05 Uhr

Leider kenne ich keine Tutorials bzgl. Datenbanken. Ich habs mir bei diversen Problemstellungen mit Unterstützung von Google beibringen können. Prinzipiell wurde fast jedes Problem schon 1000 mal durchgekaut. Mit den richtigen Suchbegriffen, findet man dann auch die passenden Lösungen dazu. 😃

Lg und schönes Wochenende,

XXX

11.02.2011 - 15:39 Uhr

Das tut schon beinahe weh weil es an den grundlegendsten Grundlagen fehlt.

Wie wärs mit ein wenig Eigeninitiative und Bastlerehrgeiz? Dir fehlt eine Klammerung weil hier AND stärker bindet als OR.

 WHERE 
vMandanten_FreieFelder.nummer = '10' AND V_WAC_System_Stammdaten_Mandanten.[Mandant bis] IS NULL 
AND (LEN(<@zustMitarbeiter>)=0 OR V_WAC_System_Stammdaten_Mandanten.[Nr. zust. Mitarbeiter] IN (<@zustMitarbeiter>))

Lg XXX

11.02.2011 - 11:23 Uhr

Ich glaube nicht das dein Vorhaben zu Deadlocks führt. Nachdem ja alle Threads soweit ich verstanden habe autonom auf die Datenbank zugreifen. Was natürlich passieren wird ist, dass die Tabelle bei einem Schreibzugriff gesperrt wird und die anderen Threads für die Dauer warten müssen. Im Sinne der Datenintegrität macht das natürlich Sinn, sonst würdest du evt. Daten löschen wollen, die es nicht mehr gibt oder umgekehrt. Es sei denn die verschiedenen Threads manipulieren immer unterschiedliche Datensätze und kommen sich dadurch nie in die Quere. In dem Fall könntest du den Transaction Isolation Level der Datenbank oder auch nur der einzelnen Abfragen niedriger setzen und könntest damit ein gleichzeitiges schreiben/lesen erlauben was aber natürlich nicht ungefährlich ist. Abgesehen davon muss der SQL Server erst einmal richtig konfiguriert werden, damit er mehrere Cores überhaupt verwenden kann.

Lg XXX

11.02.2011 - 10:55 Uhr

Schon mal Margin des DGVs, Padding der TabItems und die Positionierung(Location) überprüft?

Lg XXX

11.02.2011 - 10:47 Uhr

Von wo wird denn die Methode newImage aufgerufen?

Ich hab hier ein denke ich ähnliches Problem gefunden, bei dem empfohlen wird die Eigenschaften durch Dispatcher.Invoke zu setzten. (offenbar aus einem fremden Thread).

Oder vielleicht hängts auch mit deinen Images zusammen. Aus irgendwelchen Gründen sind sie "frozen" und offenbar möchte die Listbox aber irgendwelche Eigenschaften setzen. Warum und weshalb kann ich an der Stelle nicht beantworten. 😃

Lg XXX

11.02.2011 - 10:32 Uhr

Ja hab auch nicht aufgepasst aber sollte jetzt nicht mehr so schwierig sein das auszubessern oder?


SELECT ... FROM Tabelle
WHERE @PARAMETER IS NULL OR Gruppen IN (@PARAMETER)

oder falls der Parameter nicht null sondern auch ein leerstring sein darf:


SELECT ... FROM Tabelle
WHERE LEN(@PARAMETER)=0 OR Gruppen IN (@PARAMETER)

und die Kombination aus Beidem:


SELECT ... FROM Tabelle
WHERE LEN(ISNULL(@PARAMETER,''))=0 OR Gruppen IN (@PARAMETER)

Lg XXX

11.02.2011 - 10:20 Uhr

Probier mal ohne den Style die Daten zu laden. Funktionierts dann?

11.02.2011 - 10:02 Uhr

SELECT ... FROM Tabelle
WHERE Gruppen IS NULL OR Gruppen IN (@PARAMETER)

Lg XXX

11.02.2011 - 10:01 Uhr

Es hat dir niemand was geklaut. 😃 Versuchs einfach mal wie inflames2k bereits erwähnt hat mit SelectedItem.

so in der Art vielleicht:


        public void newImage(List<BitmapSource> imageList)
        {
            try
            {
                InitializeComponent();
                imageListBox.ItemsSource = imageList;
                imageListBox.SelectedItem = imageList.First();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

Lg XXX

11.02.2011 - 09:58 Uhr

Hier hab ich einen ganz brauchbaren Artikel dazu gefunden: When and How to Use Dispose and Finalize in C#

Im Grunde stimmt schon was du schreibst über Managed und Unmangaged Resourcen. Jedoch wenn eine Klasse extra das IDisposable Interface implementiert hat das Gründe die nicht ignoriert werden sollen. In den meisten Fällen, verwaltet eine solche Klasse dann selbst Unmanaged Resourcen und das Freigeben dieser ist wieder Aufgabe des Programmierers.

Lg XXX

10.02.2011 - 14:57 Uhr

Die Zelle befindet sich noch im EditMode wenn sie geclickt wird und erst durch Verlassen der Zelle (in deinem Fall der Klick auf einen anderen Button) beendet diesen.

Du kannst aber auch im CellContentClick Event manuell EndEdit aufrufen dann wird die Value unmittelbar beim Click aktualisiert.

Lg XXX

10.02.2011 - 12:47 Uhr

Mit

besser und schneller durch die benutzte Auflistung zu gehen.

wird wohl die Datenquelle gemeint sein, zu der du anscheinend keinen Zugang hast(warum auch immer).

Lg XXX

10.02.2011 - 11:46 Uhr

Jetzt seh ichs erst: Die Toolbar wird ja in den Resourcen oben deklariert. Wieso setzt du sie dann umständlich über Properties und Bindings wenn du Resource doch direkt zuweisen kannst:

ContentSource="{StaticResource UserToolBarSimple}"

Lg XXX

//EDIT: Wir sind denke ich sowieso auf dem Holzweg mit der ContentSource: ContentPresenter. Du müsstest wohl eher auf das Content Property binden.

10.02.2011 - 11:34 Uhr

Das DependencyProperty ist ein Property des Windows, das heißt, du musst auf das Window im Binding verweisen. Entweder machst du das per

{Binding ElementName=window, Path=RibbonToolBar}

(davor musst du natürlich dem Window einen Namen geben) oder per

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=RibbonToolBar}

Lg XXX

10.02.2011 - 11:17 Uhr

Da gibts nicht viel zu vermuten: Du machst bei Variante B exakt das Gleiche wie bei A nur das du zusätzlich die Werte vorher noch in eine Liste kopierst was natürlich zusätzlich Zeit in Anspruch nimmt.

lg XXX

10.02.2011 - 11:07 Uhr

Was für eine Antwort erwartest du dir jetzt? Wie ein Binding auszusehen hat wirst du wohl wissen bzw. kannst du das unter Binding nachlesen.

Es gibt daher eher ein spezifisches Problem in deiner Umsetzung welches sich aus deinem Text nicht rauslesen lässt. Also bitte poste doch mal bitte was du genau wie probiert hast dann kann man auch leichter sagen was daran falsch ist.

Lg XXX

10.02.2011 - 09:43 Uhr

Mit

    <sdk:ChildWindow.Resources>
        <mytools:UserRegistration x:Key="EditStatus" />
    </sdk:ChildWindow.Resources>

erstellst du eine neue Instanz deiner Klasse, was du bestimmt nicht willst. Irgendwo hast du ja bereits eine Instanz und die muss als DataContext deiner View gesetzt werden.
Nur dann kann die View auch auf die Änderungen deines ViewModels reagieren.


UserRegistration userRegistration = new UserRegistration();

MyView view = new MyView();

view.DataContext=userRegistration;

Lg XXX

09.02.2011 - 15:04 Uhr

typeof(xyz).GetMethod(...) -> GetCustomAttributes

Lg XXX

09.02.2011 - 09:34 Uhr

Du kannst ja alternativ statt der Objekte in der Liste die Liste an sich selbst sharen. Damit erreichst du, dass in deinen Instanzen die selbe Liste vorhanden ist und wenn in einer Instanz das Objekt gelöscht wird ist es natürlich auch in allen anderen weg. Nicht gerade die schönste Variante.

Oder du führst Methoden zum Hinzufügen und Entfernen von Objekten ein und implementierst Events in denen du dann alle zugehörigen Instanzen manipulieren kannst. MMn die schönere Variante.

Lg XXX

08.02.2011 - 15:37 Uhr

Ja das war mir schon klar drum hab ich auch

die bei einer SQL Serververbindung hoffentlich eine SqlConnection sein wird dazugeschrieben.

Probier mal ob du nach SqlConnection casten kannst.



SqlConnection connection = myContext.Connection as SqlConnection;

if(connection != null)
{
   //do your fancy stuff in here. :)
}
else
{
   //einen versuch wars wert. :(
}

Lg XXX

08.02.2011 - 14:23 Uhr

Über die Connection Eigenschaft eines ObjectContext kommst du an die DbConnection, die bei einer SQL Serververbindung hoffentlich eine SqlConnection sein wird.

Lg XXX

08.02.2011 - 13:21 Uhr

Noch eine Frage: Kann ich feststellen, ob ein instanziertes Objekt noch irgendwo anders referenziert ist?
Sonst laufe ich Gefahr die Objekte zu zerstören, obwohl sie noch anderweitig verwendet werden.

Nur um es erwähnt zu haben: Das Disposen und Freigeben von Resourcen ist deine Aufgabe und nicht die des Systems. Das es offenbar nicht identifizierbare eventuelle Abhängigkeiten gibt, spricht für ein nicht durchdachtes oder ziemlich undurchsichtiges Konzept wodurch ich eher zu Refactoring raten würde.

//EDIT: Ist sicher nicht allgemeingültig... 😃

Lg XXX

07.02.2011 - 11:48 Uhr

Stimmt, so wie dus vorher gemacht hast sollts eigentlich eh passen aber ja... es war auch nur eine Vermutung.

Bei mir funktionieren implizite Styles auf UserControls auch nicht aber ich hab mich nie wirklich damit beschäftigt sondern einfach manuell gesetzt. Und das obwohl ich nicht einmal eine abgeleitete Basisklasse verwende. Bin schon gespannt ob hier noch wer was dazu beitragen kann. 😃

Lg XXX

07.02.2011 - 11:34 Uhr

Weil man keinen Style auf einen Basistypen anwenden kann. Du müsstest deinen Style ändern oder einen neuen Style erstellen mit TargetType="myUsercontrolType"

Lg XXX

03.02.2011 - 14:22 Uhr

Naja, die Informationen müssen auch bereitstehen wenn gerade keines der beiden Forms offen ist.

Das ändert ja nichts daran ob eine Form offen ist oder nicht.

Es gibt einen Punkt in deinem Programm, der deine Forms öffnet(wenn sie unabhängig von einander geöffnet werden). Diese gemeinsam genutzten Variablen musst du dann nur an dem jeweiligen Punkt parat haben um sie den Forms bei bedarf(show) zu übergeben. Dafür brauchst du keine statischen Klassen oder Variablen oder irgendwas in der Richtung.

Lg XXX

03.02.2011 - 14:16 Uhr

Vielleicht hilft dir das ja schon mal weiter:

CorespondingTextEditor="{Binding ElementName=textEditor}"

Lg XXX

03.02.2011 - 11:00 Uhr

Naja nachdem es eine Methode "SetBinding" gibt hätte ich mir gewünscht, dass es auch irgendwo ein passendes BindingSetEvent oder sowas gibt aber nachdem sich Bindings eh sogut wie nie ändern, tuts auch das Loaded Event um dort nach den Bindings zu suchen.

Danke für den Input.

Lg XXX

03.02.2011 - 09:48 Uhr

Ja, das wäre zu schön gewesen, aber leider führt auch das zu:

"datenVomServer = Server.Elemente

hat eine Ausnahme vom Typ "System.Runtime.InteropServices.COMException" verursacht."

Naja das war auch nur ein optimistisches Beispiel. Das du deine Serverinstanz evt. auch erst neu erstellen und holen musst weil diese wahrscheinlich auch auf der alten Verbindung basiert hab ich jetzt nicht mitbedacht.

03.02.2011 - 08:47 Uhr

Ich könnte mir vorstellen, dass du bei einem Abbruch alle zu bearbeitenden Objekte neu ladest aber nur von dem an weiterarbeitest wo der Abbruch stattgefunden hat.



EineKlasse[] datenVomServer = Server.Elemente;

//An dieser Stelle besteht bereits eine Verbindung 

for(int i = 0; i < datenVomServer.Length; i++)
{

  try
  {
     tuWasMit(datenVomServer[i]);

     //Dabei wird auf die Daten vom Server zugegriffen...
  }

  catch (System.Runtime.InteropServices.COMException)
  {
     //Das Unterbrechen der Verbindung wird abgefangen...
     Verbindung.Reconncect();
     //Dann soll beim Element, das vor dem Verbindungsabbruch bearbeitet wurde, fortgesetzt werden
    
     datenVomServer = Server.Elemente // <- Daten neu laden und mit bestehendem Index weiterarbeiten.
     i--; // evt. damit das letzte Element neu bearbeitet wird
  }
}

Lg XXX

03.02.2011 - 08:38 Uhr

Die Verbindug wird ja wieder aufgebaut und trotzdem bleibt der Inhalt derselbe.

Es ist aber eine andere Verbindung. Die COM Objekte wissen das ja nicht.

03.02.2011 - 08:37 Uhr

Kannst du nicht nur ein paar Elemente nach einander laden, bearbeiten und dann die nächsten Anfordern? Dann wär eine Unterbrechung nur so schlimm als das das letzte Packet neu geladen und bearbeitet werden muss anstatt alles neu zu laden.

Lg XXX

02.02.2011 - 17:52 Uhr

Hallo zusammen,

ich würde gerne mitbekommen, ob auf ein Property ein Binding angewendet bzw. geändert wurde.

Grund: Ich möchte anhand dieses Ereignisses das Binding so manipulieren, dass ValidateOnDataError automatisch auf true gesetzt wird bei bestimmten Properties.

OnPropertyChanged wird nicht gefeuert nur wenn ein Binding definiert wird. Erst wenn ein konkreter Wert durch das Binding gesetzt wird, wird PropertyChanged aufgerufen.

Vielen Dank,

XXX

02.02.2011 - 16:43 Uhr

Edit: Beitrag angepasst, weil es anscheinend Probleme gibt Resourcen mehrmals in eine Collection einzubinden.

Folgendes funktioniert natürlich:


<Style x:Key"x"/>

<Element Property="{StaticResource x}"/>
<OtherElement Property="{StaticResource x}"/>

wohingegen das hier aus mir unerklärlichen Gründen nicht funktioniert:


<Style x:Key"x"/>

<Element>
    <Element.CollectionProperty>
        <StaticResource ResourceKey="x" />
    </Element.CollectionProperty>
</Element>

<OtherElement>
    <OtherElement.CollectionProperty>
        <StaticResource ResourceKey="x" />
    </OtherElement.CollectionProperty>
</OtherElement>

wenn man aber die StaticResource wieder in einem Objekt kapselt und somit nur auf ein Property anwedet dann funktionierts wieder:


<Style x:Key"x"/>

<Element>
    <Element.CollectionProperty>
        <Wrapper Property="{StaticResource x}" />
    </Element.CollectionProperty>
</Element>

<OtherElement>
    <OtherElement.CollectionProperty>
        <Wrapper Property="{StaticResource x}" />
    </OtherElement.CollectionProperty>
</OtherElement>

Strange WPF!

Lg XXX

02.02.2011 - 14:26 Uhr

Beschreibung:

Weil ich gerade in der Situation war, zwecks Wiederverwendbarkeit einen Teil eines Styles auszulagern hab ich eine kleine Klasse geschrieben mit der man ganz praktisch mehrere Styles wieder zu einem zusammenfügen kann.


    //einmal eine allgemeine Klasse um Styles zu mergen
    public static class StyleExtensions
    {
        public static void Merge(this Style result, Style style)
        {
            if (style == null)
                return;

            if (result.TargetType.IsAssignableFrom(style.TargetType))
                result.TargetType = style.TargetType;

            if (style.BasedOn != null)
                Merge(result, style.BasedOn);

            foreach (SetterBase setter in style.Setters)
                result.Setters.Add(setter);

            foreach (TriggerBase trigger in style.Triggers)
                result.Triggers.Add(trigger);

            foreach (object key in style.Resources.Keys)
                result.Resources[key] = style.Resources[key];
        }
    }


    public class StyleWrapper : Style
    {
        public Style Style { set { this.Merge(value); } }
    }

    //und einmal die MergedStyle Klasse mit der man im XAML die Styles mergen kann
    [ContentProperty("MergedStyles")]
    public class MergedStyle : Style
    {

        private ObservableCollection<Style> _mergedStyles;
        public Collection<Style> MergedStyles
        {
            get
            {
                if (_mergedStyles == null)
                {
                    _mergedStyles = new ObservableCollection<Style>();
                    _mergedStyles.CollectionChanged += OnStylesChanged;
                }
                return _mergedStyles;
            }
        }

        private void OnStylesChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            if (e.NewItems != null)
            {
                foreach (Style style in e.NewItems.Cast<Style>())
                    this.Merge(style);
            }
        }
    }

Hier kann man dann in der MergedStyles collection einfach beliebig viele Styles zusammentun.


    <Utilities:MergedStyle x:Key="{x:Type TextBox}">
         <Style TargetType="TextBox">
                <!---->
         </Style>
            
         <Utilities:StyleWrapper Style="{StaticResource MandatoryImportanceStyle}" />
    </Utilities:MergedStyle>

Lg XXX

Schlagwörter: WPF, Style, Merged

02.02.2011 - 10:59 Uhr

Das Rufzeichen oder was du stattdessen anzeigen lassen willst wird mit dem Validation.ErrorTemplate, welches du in einem Style zB setzen kannst, definiert.

Lg XXX

01.02.2011 - 14:43 Uhr

So nebenbei kann ich dein Problem sowieso nicht nachvollziehen. Ich entwickel meine GUI's ausschließlich im XML Editor und nicht im Designer weswegen mir sowas nicht auffallen würde aber auch bei einem kleinen TestProjekt wo ich jetzt den Designer geöffnet habe, ist mir das Problem nicht untergekommen. Kannst du vielleicht ein kleines Beispielprojekt posten?

Lg XXX

01.02.2011 - 12:08 Uhr

Probier mal VerticalContentAlignment auf Center zu setzen?!?

Lg XXX

01.02.2011 - 11:59 Uhr

Tritt der Fehler auch auf, wenn du das Picture als DataContext Bindest und dann nur mehr Thumbnail als ImageSource?

<l:PictureViewer DataContext="{Binding Picture}" Source="{Binding Thumbnail}"/>

Lg XXX