Laden...

Forenbeiträge von CodeF Ingesamt 12 Beiträge

10.05.2021 - 21:40 Uhr

Hallo, folgendes Szenario:

Es soll eine Anwendung entwickelt werden, die per Ethernet Dateien auf einem Ziel-PC an definierten Orten schreiben soll. (Update von Anwenderdaten durch eine eigene Software) Ziel Rechner ist immer mit Windows 10 ausgestattet. Beide Rechner befinden sich im selben Netzwerk. Später soll auch eine Verbindung über VPN über das Internet möglich sein.

Welche Technologie sollte hier verwendet werden?

WCF, NamedPipes, SSH.Net, ... ?

03.02.2021 - 07:39 Uhr

Hallo, ich bin in einer WPF-MVVM-Anwendung und habe eine Klasse für den Zugriff auf Daten (DataAccessLayer).
Diese wird von einer Businesslogic-Klasse verwendet und diese ist für das Laden bzw. Speichern von verchiedenen Daten zuständig. Hier wird auch der Dateiauswahldialog gesteuert.
Es gibt für zwei unterschiedliche Dateitypen zwei unterschiedliche FileLoad-Dialoge die jeweils ihren letzten gewählten Pfad speichern sollen, um bei nächstem Start wieder verfügbar zu sein.
Ich hab mir des Thema mit den ConfigurationManager angeschaut, dieser ist aber in meiner Klasse nicht verfügbar sondern nur in der Klasse des Hauptfensters.
Wie realisiere in nun die Speicherung und das Laden der verschiedenen Pfade?
Wie macht ihr so was?

Gruß

17.03.2020 - 09:31 Uhr

Hallo,

im Grunde würde nachfolgender Code funktionieren, ich bräuchte aber nicht PreviousData sonder CurrentData.

Wie kann ich darauf zugreifen?


<TextBlock Width="50" Text="{Binding RelativeSource={RelativeSource Mode=PreviousData}}" />

Gruß

16.03.2020 - 08:46 Uhr

Hi,

ich möchte im Popup einer Combobox das selektierte Item mit einem zusätzlichen Text/Symbol anzeigen.

Dazu müsste ich aber im ItemTemplate einen TextBlock an einen Item einer Collection binden. K.a. ob das geht, hier der Code:


      <ComboBox
            Grid.Row="1"
            Grid.Column="1"
            Margin="5,5,5,5"
            ItemsSource="{Binding AvailableBaudrates}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Width="50" Text="{Binding AvailableBaudrates}" />
                        <TextBlock x:Name="Column2" Text="X" />
                    </StackPanel>
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBoxItem}, Path=IsSelected}" Value="True">
                            <Setter TargetName="Column2" Property="Visibility" Value="Visible" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBoxItem}}" Value="{x:Null}">
                            <Setter TargetName="Column2" Property="Visibility" Value="Hidden" />
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

und


 public class ComPortEdit
    {
        int[] baudrate = new int[] { 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200, 230400, 460800, 921600 };
        int[] databits = new int[] { 5, 6, 7, 8 };

        private ObservableCollection<int> availableBaudrates;

        public ObservableCollection<int> AvailableBaudrates
        {
            get
            {
                return availableBaudrates ?? (availableBaudrates = GetBaudrates());
            }
            set
            {
                availableBaudrates = value;
            }
        }

 private ObservableCollection<int> GetBaudrates()
        {
            var b = new ObservableCollection<int>();
            foreach (int i in baudrate)
            {
                b.Add(i);
            }
            return b;
        }


Die ItemSource der Combobox erwartet ja eine Collection, die Bindung des TextBlocks einen String.

Dieser String ist ja aber ein Item in der Collection. Wie krieg ich das hin?

20.02.2020 - 06:43 Uhr

Hi, evt. hab ich das dann falsch aufgebaut oder verstanden.

Der Backgroundworker befindet sich nun mal in meiner Klasse für das Laden.

In dieser möchte ich aber nichts mit Fehlerausgabe oder sowas machen (MVVM).

Wie isz hier nun die richtige vorgenhensweise. Events? Und dann? Doch wieder über Argumente die Fehler melden?

19.02.2020 - 07:31 Uhr

Guten Morgen,

irgendwie komme ich da nicht zurecht.

Wenn ich davon ausgehe dass eine länger andauernde Sache mittels Backgroundworker ausgeführt wird um die GUI nicht zu blockieren ist der Ablauf doch so:

  1. Aus den GUI-Thread wird eine Methode aufgerufen z.B. LoadData

  2. In dieser Methode LoadData wird ein Backgroundworker zur Arbeit herangezogen und gestartet

  3. Das Programm kehrt in den GUI-Thread zurück da ja jetzt der BW die Arbeit macht

  4. Im Backgroundworker wird eine Exception ausgelöst

  5. In der Mehtode ...WorkerCompleted ist die Exception mittels Abfrage von e.Error abfragbar

Wie und auf welche weise soll nun der GUI-Thread über diese Exception benachrichtigt werden?
Auch wenn in der ...WorkerCompleted -Methode eine neue Exception geworfen wird, wer soll diese Abfangen? Der Aufruf aus 1. ist ja schon lange vorbei.

17.02.2020 - 21:15 Uhr

Ich hab mir die NET Guidelines und auch "Best Practices für Ausnahmen" angeguckt.

So wie ich es verstanden habe, ist da das Mittel der Wahl Exception. Aber nur wenn nicht schon davon augegangen wird, das ein Fehler auftritt. Darum gibt es dann die z.B. TryParse-Methoden. Die sollen dann vorrangig verwendet werden.
=> Fehlervermeidung zuerst, und dann erst Exceptions!

Nur wie sieht es aus, wenn Exceptions innerhalb eines Backgroundworkers erzeugt werden?

Mann kann in der WorkerComplete-Methode das e.Error abfragen und schauen, ob allgemeine oder eine eigene Exception ausgelöst wurde. Hier müsste dann aber die Exception neu geworfen werden um den Fehler an die aufrufende Klasse weiterzuleiten. Leider funktioniert dies bei mir nicht. Führt dann zu einen Fehler in der mscor.lib.

Wie denkt Ihr darüber?

05.02.2020 - 07:23 Uhr

Hi, wie wäre für folgendes der richtige Weg?

In einer MVVM-Anwendung würde aus der Businesslogik heraus eine Methode in einer Klasse für einen Datenimport per CSV aufgerufen. Diese ist für das Laden und das Aufbereiten der Daten zuständig. Nun können da ja verschiedene Fehler passieren:

  • Datei nicht zugreifbar
  • Daten nicht auswertbar
  • Version der Datendatei veraltet

Bei manchen dieser Fehler würde eine Exception auslösen und wird daher mit einem Try/Catch abgefangen, andere würden per Code bei der Auswertung entstehen.

Wie wird nun die BL und der Anwender über diese Fehler informiert? In der CVS-Laden-Klasse sollen keine MsgBoxen und sowas enthalten sein.

Möglichkeiten wären meiner Meinung nach:

  • Rückgabewert über Enum
  • Exceptions und eingene Exceptions
  • ?

Wie sieht das aus wenn ein Backgroundworker verwendet wird was durchaus sinnvoll ist?

Gruß

09.01.2020 - 07:50 Uhr

Hi, folgender Stand.

Um den Balken bei negativen Werten nach unten wachsen zu lassen muss die PB um 180° gedreht werden. Dies funktioniert mit den neuen Code auch. Danke.

Leider müsste dann aber der Minimum-Wert auf Null und der Maximum-Wert auf z.B.: -1000 gesetzt werden. Wenn ich mit dieser Einstellung teste, ist der komplette Bereich der PB immer gefüllt, egal welcher Value vorgegeben wird.

Gruß

08.01.2020 - 15:54 Uhr

Hallo, danke für den Beitrag.

Wenn ich das probiere kommt eine Fehlermeldung "CompositeTransform wird bei einem WPF-Projekt nicht unterstützt.

Sorry.

08.01.2020 - 15:23 Uhr

Hi. Danke für die Info.

Ein fertiges Contol möchte ich nicht, will doch was lernen.

Mein erster Ansatz war zwei mal die ProgressBar in ein StackPanel gesteckt damit die ober PB die positiven Werte anzeigt und die untere die negativen. Leider klappt das mit der Füllung bei den negativen Werten nicht. (PD füllt immer von min nach max)

Gruß

07.01.2020 - 16:04 Uhr

Hallo, ich bin dabei mich in C# und WPF einzuarbeiten.

Für ein Projekt brauche ich eine Balkenanzeige, die mir Werte visualisieren kann.

Für den ersten Anwendungsfall (min: 0.0 max: 10000.0) würde mir die Funktion der ProgressBar völlig ausreichen.

Für den zweiten Anwendungsfall (min: -5000.0 max: 5000.0) sollte der Balken der ProgressBar bei einem Value von z.B. -2500.0 von der Null-Linie aus nach unten sich mit entsprechender Farbe füllen und bei einem Value von z.B. 1000.0 von der Null-Linie nach oben füllen.

Leider habe ich im Netz nichts entsprechendes gefunden.
Für einen Umsetzungsvorschlag wäre ich sehr dankbar.

Gruß