https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings
<TextBox Text="{Binding Test, StringFormat=F1}"/>
Hallo, schau dir mal diesen Beitrag an: [FAQ] Das .NET Ökosystem - .NET, .NET Core, .NET Standard, NuGet und Co
Hallo.
Bevor du weitermachst, schau dir unbedingt diesen Artikel an: https://mycsharp.de/forum/threads/118261/artikel-mvvm-und-databinding! WPF und MVVM gehören zusammen. Du machst es dir sonst unnötig schwierig.
Im Code Behind steht normalerweise nichts. Dass steht alles im ViewModel. Schau dir den Link von Abt an. Besonders Punkt 2.1.
Fang am Besten mit Strings an. Das muss erstmal funktionieren.
Ich hab zwar wenig mit Regex zutun, aber Tante Google hat mir das empfohlen: https://learn.microsoft.com/de-de/dotnet/api/system.text.regularexpressions.regex.matches?view=net-7.0 und c# - How to find multiple occurrences with regex groups? - Stack Overflow
Hääää, "schlecht bis gar nicht dokumentiert"????? Also, dem muss ich widersprechen. Schau mal hier: https://learn.microsoft.com/de-de/dotnet/api/?view=net-7.0 und noch tausende andere Seiten. Man muss sich natürlich damit beschäftigen.
dann schau mal hier: https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/operators/lambda-operator
Hab bei Google "C# ⇒" eingegeben, war gleich der erste Treffer.
Das sieht mir nach einem Grauverlauf aus, der da drüber liegt. Soll vielleicht einen 3D-Effekt erzeugen.
Bei deinem Code geht es sehr durcheinander zu. Aus allen möglichen Google-Ecken hast du wohl Code zusammengesucht.
Mal verwendest du das CommunityToolkit, mal ReactiveUI. Warum sollte in der Listbox Items falsch sein? Siehe hier: https://docs.avaloniaui.net/docs/controls/listbox
Die Commands der Button verwendest du nicht entsprechend dem MVVM-Pattern. Siehe hier: https://docs.avaloniaui.net/docs/data-binding/binding-to-commands
Mein Code sieht dann so aus: (Ich hab die Bilder mal weggelassen.)
public class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel()
{
AddCommand = ReactiveCommand.Create(Add);
}
public AvaloniaList<ObservableBitmapAndText> ListBoxItems { get; set; } = new AvaloniaList<ObservableBitmapAndText>();
public ReactiveCommand<Unit, Unit> AddCommand { get; }
void Add()
{
ListBoxItems.Add(new ObservableBitmapAndText { Text = "blub" });
}
}
public class ObservableBitmapAndText : ViewModelBase
{
private string _text;
public string Text
{
get => _text;
set => this.RaiseAndSetIfChanged(ref _text, value);
}
}
<DockPanel LastChildFill="True">
<Button Content="Add" Command="{Binding AddCommand}" DockPanel.Dock="Bottom"/>
<ListBox DockPanel.Dock="Top" Name="listBox" Items="{Binding ListBoxItems}" Height="500" Width="500">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Bild "/>
<TextBlock Text="{Binding Text}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
Warum MVVM erst später? Das ist so, wie: Ich möchte Autofahren, aber die Fahrerlaubnis mache ich später.
Nun zu deinem Problem. Ein Item kann nur ein Element aufnehmen. Möchtest du mehrere Elemente einem Item hinzufügen, benötigst du einen Container, wie Grid oder Stackpanel. Dieser sorgt dann dafür, dass die Elemente entsprechend angeordnet werden. Das kann man auch im Code machen, ist halt aufwendiger. Schau dir am Besten die Grundlagen von WPF an.
Ich kann nicht nachvollziehen, warum das ganze so gemacht wird. Gibt es da einen Grund? Was heißt "funktioniert nicht".
Hallo.
Schau dir unbedingt diesen Artikel an: [Artikel] MVVM und DataBinding | myCSharp.de ! WPF und MVVM gehören zusammen.
Am 1. April erstmal einen Riesen Schreck bekommen, dann an Aprilscherz gedacht. Am 2. April ins Grübeln gekommen. Und dann abends ein großes Ahhhh.
Nun zu einem Problem. Wenn ich in der Forensuche mir die Treffer als "Beitrag" anzeigen lasse, dann bekomme ich Ergebnisse. Wenn ich auf "Thema" umschalte und bei Inhalt durchsuchen der Button auf "Gesamter Beitrag" steht, dann bleibt die Suche leer.
Und wie kann man die Suchbegriffe Und-Verknüpfen?
Also ich nutze LiveCharts2. Ist zwar noch Beta, läuft aber stabil und ist sehr schnell. LiveCharts2
LiveCharts (v0) wird schon seit einigen Jahren nicht weiterentwickelt.
Setze mal ReadTimeout. Es kann sein, dass ReadLine ewig auf das Ende wartet.
Steht ja da, EndOfStream. Du liest in Zeile 23 ein Zeichen ein und testest es auf -1. Mit ReadByte wird aber die Zeichenposition um 1 erhöht. In Zeile 28 liest du den nächsten Wert. Erstens überspringst du damit ein Zeichen und zweitens kann dieses Zeichen dann auch -1 sein. Schau dir mal das an: BinaryReader.PeekChar Methode
int b brauchst du dann auch nicht mehr.
Was machst du eigentlich in Zeile 38?
Hallo.
Du schreibst jedes Zeichen in eine neue Zeile, ist bestimmt nicht so gewollt.
Dann testest du den counter auf 0, erst dann zählst du hoch. Das wird aber nicht passieren, da ja immer 0.
Und nutze using für den BinaryReader.
Hallo.
Wenn du die Methode 1 aufrufst, dann lass dir die Listen zurückgeben. Diese übergibst du als Argument der Methode 2.
Siehe hier: Methoden (C#-Programmierhandbuch)
Zum Thema Validierung in WPF schau dir mal diese Links an:
Gewusst wie: Implementieren von Validierungslogik für benutzerdefinierte Objekte
Gewusst wie: Implementieren der Bindungsvalidierung
WPF und MVVM richtig einsetzen - Teil 3
Deine Ideen sehen ganz nach diesem Problem aus: [FAQ] Kommunikation von 2 Forms
Das ist unabhängig von der Oberfläche. Egal ob WPF oder Winforms. Schau dir unbedingt mal OOP an.
Hallo
Ich verstehe nicht, was du damit erreichen willst, aber da es sich hierbei um WPF handelt, solltest du dir unbedingt mal das ansehen: [Artikel] MVVM und DataBinding
Hallo
Da man aus unerklärlichem Grund seine eigenen Einträge nach kurzer Zeit nicht mehr bearbeiten kann!!!
siehe hier: Hello World! myCSharp auf .NET
Ebenfalls anders ist, dass Beiträge in Zukunft nur noch innerhalb eines gewissen Zeitraums editieren werden können, der derzeit 30 Minuten beträgt. Der Zeitraum ist nicht fix; wir müssen auch lernen, welcher Zeitraum hier sinnvoll ist.
Der Grund ist, dass in der Vergangenheit zu oft der Kontext selbst nach Wochen editiert wurde, sodass der Verlauf eines Themas nur noch schwer nachvollzogen werden konnte.
Binde die IrgendeineViewModelKlasse an den DataContext der View und die ItemsSource wird gebunden an Sammlung.
Hallo
schau dir mal das MVVM-Entwurfsmuster an.
[Artikel] MVVM und DataBinding
Die Anmerkungen stehen in meiner Signatur und sind allgemein gemeint.
so war das wohl nicht gemeint. Schau dir mal den Link an: SerialPort.DataReceived Ereignis und hier
Vom Seriellen Port empfangene Daten in eine Textbox schreiben
interessanter Beitrag: Avalonia platform support - why it's simple
Ja, kann man mit C# machen. Egal, ob Winform oder WPF.
@CyborgBeta
zu Punkt 2 siehe hier:
Serialisieren und Deserialisieren von JSON-Daten in .NET
CsvHelper
zu allen anderen Punkten empfehle ich dir, dich mal intensiv mit C# zu beschäftigen: Einführung in C#
Und zum Thema:
Ich suche nach einer einfachen GUI-Tabelle, die durch einen (Big Data-)Algorithmus mit Inhalten gefüllt werden soll...
schau dir mal das an: [Artikel] Drei-Schichten-Architektur
Und wenn du dich für WPF entscheiden solltest, dann noch diesen Link: [Artikel] MVVM und DataBinding
Hallo
Ich geh mal davon aus, dass du eine App für Windows schreiben möchtest. Da gibt es zum Beispiel Winforms und WPF.
Beide haben unterschiedliche Controls zur Darstellung von Daten. Der Suchbegriff "Tabelle" führt mit Sicherheit ins Leere. "Datagrid" ist da besser.
Beide Technologien haben unterschiedliche Einstiegshürden und Anforderungen. Damit solltest du dich am Anfang beschäftigen.
Beide haben einen Designer. Man muss ihn aber nicht nutzen. Ich verwende seit Jahren WPF, nutze keinen Designer und komme damit sehr gut klar.
Nun noch einige Links:
WPF Kategorien von Steuerelementen
Steuerelemente für Windows Forms
@FZelle
404 - Page not found
https://learn.microsoft.com/en-us/previous-versions/dotnet/articles/ms993236(v=msdn.10)
Also ich würde ja MVVM einsetzen. Und anstelle Datagrid ein Listview.
public ObservableCollection<JahresTabelle> Tabelle { get; set; }
<ListView ItemsSource="{Binding Tabelle}" >
<ListView.View>
<GridView>
<GridViewColumn Header="Kunde" DisplayMemberBinding="{Binding Kunde}"/>
<GridViewColumn Header="Projekt" DisplayMemberBinding="{Binding Projekt}"/>
<GridViewColumn Header="Volumen">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Volumen}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Margin="0,0,3,0"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Und dann noch etwas schön machen.
Hallo
schau dir mal das an: LiveCharts2. Ist zwar noch beta, funktioniert aber schon sehr gut.
grübel grübel
Was willst du uns mit dem Beitrag sagen? Gehört der Code zum Text? Ich verstehe nicht, was du gemacht hast und was du willst.
Ich vermute etwas, das würde aber bedeuten, dass du meinen Beitrag nicht gelesen/verstanden hast.
Indem du zu dem alten Wert den neuen Wert addierst. Das funktioniert natürlich nicht mit String. Du musst die Eingaben also vorher in eine Zahl umwandelt. Stichwort: Parse
How to convert a string to a number (C# Programming Guide)
Hallo
Du musst die entsprechende Anzahl von Sternchen zu einem String zusammenfügen. Das machst du am Besten in einer eigenen Methode.
Zwei interessante Links dazu:
Data validation in WPF
WPF und MVVM richtig einsetzen - Teil 3
Es gibt zwei wichtige Dinge, die man hier benötigt. Man muss die Doku lesen und verstehen und man muss debuggen können. Denn bei solchen Fragen bekommt man meistens nur den Link für die Doku. Und dort findet man alle Methoden und die Erklärung dazu.
Und: "Wissen heißt wissen, wo es geschrieben steht", hat Albert Einstein gesagt.
int input = 1439;
string result = TimeSpan.FromMinutes(input).ToString(@"hh\:mm");
double result2 = TimeSpan.Parse(result).TotalMinutes;
Console.WriteLine($"Input: {input} Zwischenergebnis: {result} Endergebnis: {result2}");
Macht 2 Zeilen Code. Funktioniert so aber nur bis 1439. Erklärung in der Doku.
Ich bin immer wieder erstaunt, wenn Einsteiger/Umsteiger mit TimeSpan, DateTimeOffset usw. hadern und lieber ihre eigenen Lösungen suchen. Mit diesen Klassen kann man fast alles machen, was man in diesem Zusammenhang benötigt. Parsen von Strings, Umwandlung in Strings, rechnen und das abhängig von der Ländereinstellung. Das können die eigenen Lösungen meistens nicht. Man muss auch beachten, das TimeSpan in vielen anderen Klassen verwendet wird, dann hat man mit der eigenen Lösung ein Problem.
Lass dir doch die Klasse automatisch erstellen: JSON and XML to C# classes in Visual Studio
Ja, da stimme ich dir zu. Und da liegt auch das Problem. Wenn der Fall dann mal eintritt, dann stellt man fest, was man so alles vergessen hat. Zuhause mag das ja noch gehen, aber in einer Firma wird es schwierig. Da ist vielleicht der Domänencontroller weg, die Daten des Warenwirtschaftssystems wurden zwar gesichert, aber die Erweiterungen wurden vergessen. Da gibt es das CRM-Sytem noch. Ups, daran hab ich nicht gedacht....
Man merkt ja schon bei Serverproblemen in der Firma, wer da plötzlich nicht mehr arbeiten kann.
Leider gibt es oft die Einstellung "das wird schon so funktionieren", "da hatten wir noch nie Probleme", "das ist ja schon viel zu teuer". Nicht nur im IT-Bereich. Und wen man als Mitarbeiter dann drauf hinweist, dann mault man immer nur. Aber im IT-Bereich wird es sehr schnell existenzbedrohend.
Da muss ja wohl einiges schief gelaufen sein.
Die Gründe für die Insolvenz
Der Vorfall ereignete sich um den Monatswechsel nach einem Stromausfall in der Region, der zu einer erheblichen Beschädigung der IT-Server und einem irreparablen Datenverlust geführt hat, nachdem auch die Notstromversorgung aufgrund technischer Defekte zeitgleich ausgefallen ist.
Kann ich irgendwie nicht nachvollziehen. Gibt es keine Datensicherung? Keine Datenrettung möglich? Mit einem Stromausfall muss man ja immer rechnen.
Ja natürlich. Es gibt da viele Wege. Hier mal was als Einstieg: Serialisierung in .NET
Für Arduino habe ich das hier gefunden: ArduinoJson library
Da gibt es den WMI Code Creator v1.0.
Da findet man diese Infos.
Hier der generierte Code:
using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_NetworkAdapterConfiguration");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_NetworkAdapterConfiguration instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("DHCPEnabled: {0}", queryObj["DHCPEnabled"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}