Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Sindelfinger
Thema: Ein Daumen hoch oder "Rockt" Button
Am im Forum: Wünsche und Kritik

Liebe Admins,

jetzt da das Forum erfolgreich umgezogen ist, erstmal meinen herzlichen Dank. Ihr habt sicher ein paar stressige Tage gehabt.

Ich persönlich würde mich sehr freuen, wenn ich Beiträgt (und vor allem die oft sehr fruchtbaren Antworten) mit einem Daumen hoch oder gar einem "rockt" beklatschen könnte. Gibt die neue Plattform sowas her?

Aber jetzt bitte keine Hektik deswegen. Ihr habt Euch eine Pause redlich verdient.

Thema: Wie mache ich einen Task zum Arbeiten im Hintergrund asynchron?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Soviel vorweg: OPI HAT'S JETZT KAPIERT ;-)

Code wird nachgereicht. Jetzt müssen alte Säcke in's Bett. Ich bereit das morgen auf und poste es dann.

Thema: Wie mache ich einen Task zum Arbeiten im Hintergrund asynchron?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Seit wir in der 13. Klasse Shakespeare im Original gelesen haben hatte ich nicht mehr so viel englischen Text vor der Nase.

Damals gab's aber noch kein Google.

Erstmal Dankeschön - ich kämpfe mich jetzt da durch. Hab bitte ein bißchen Nachsicht mit mir. Mein Hirn ist nach dem Schlaganfall noch nicht auf Prozessgeschwindigkeit und die richtigen Google-Begriffe fallen mir auch noch nicht so schnell ein.

Wir sind ja quasi Nachbarn. Wenn du auf Käsekuchen stehst - hast ihn redlich verdient ;-)

Thema: Wie mache ich einen Task zum Arbeiten im Hintergrund asynchron?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Dankeschön für die schnelle Antwort. Hast Du mir auch einen Link dazu? Ich finde nur das mit dem Frühstück

Thema: Wie mache ich einen Task zum Arbeiten im Hintergrund asynchron?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von T-Virus
Der Code sieht ziemlich abenteuerich aus.

// Methode klingt nach Array,

Ganz genau. Später soll eine große Liste von Posen umgerechnet werden. Die sind aber etwas umfangreicher als nur X,Y und Z
Zitat von T-Virus
// Zuweisung von 0 ist unnötig, da int per Default 0 ist
public int PercentageComplete { get; set; } = 0;
T-Virus


Gewohnheit. Meine Industrieroboter mögen es gar nicht, wenn sie plötzlich auf uninitialisierte Variablen stoßen. Und dann fallen auch mal schnell einige Autos pro Schicht weniger vom Band. Frisst aber kein Brot nehme ich an.

Die Progressbar ist per se erstmal gar nicht so wichtig. Es ging mir nur darum zu visualisieren, ob diese Tasks auch brav ihre Werte rauswerfen, was sie aber nicht tun.

Die von mir erstellte Klasse basiert auf einem Beispielcode aus einem youtube-Video. Dort wird aber Webclient und client.DownloadStringTasksAsync verwendet. Ich brauche einen eigenen Task und möchte diesen eben erstellen.

Thema: Wie mache ich einen Task zum Arbeiten im Hintergrund asynchron?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Liebes Forum,

ich experimentiere seit einigen Stunden nun mit Asynchronen Tasks herum, aber es scheint mir nicht zu gelingen.

Aufgabe ist es, 10000 Positionen als String zu kreieren und diese auszugeben (erstmal zum Verstehen des Ganzen). Darüberhinaus habe ich noch eine ProgressBar eingebaut, um den Fortschritt erkennen zu können.

Mein Aufruf im MainWindow:


 private async void  CreatePosesAsync(object sender, RoutedEventArgs e)
        {
            TBouput.Clear(); // Eine einfache Textbox zum Anzeigen

            Progress<ProgressReportModel> progress = new Progress<ProgressReportModel>();
            progress.ProgressChanged += ReportProgress;

            var watch = System.Diagnostics.Stopwatch.StartNew();

            var results = await AsynchMethods.CreateNewPosesAsync(progress);

            watch.Stop();
            var ElapsedMs = watch.ElapsedMilliseconds;

            TBouput.Text += $"Zeit benötigt: {ElapsedMs} ms";

        }

        private void ReportProgress(object sender, ProgressReportModel e)
        {
            CreateProgress.Value = e.PercentageComplete;
            PrintResults(e.CreatedPos);
        }

        private void PrintResults(string results)
        {
            
                TBouput.Text += results;

        }

Hier rufe ich folgende Methode auf:


   public static async Task<List<string>> CreateNewPosesAsync(IProgress<ProgressReportModel> progress)
        {
  
            List<string> output = new List<string>();
            List<int> Numbers = CreateArray();

            ProgressReportModel report = new ProgressReportModel();

            await Task.Run(() =>
            {
                Parallel.ForEach<int>(Numbers, async (number) =>
               {
                   String results = await  CreatePosesAsync(number);
                   output.Add(results);

                   report.CreatedPos=results;// = output;
                   report.PercentageComplete = Numbers.IndexOf(number)*100 / Numbers.Count();
                   progress.Report(report);
               });
            });

            return output;
        }
        private static async Task<string> CreatePosesAsync(int welche)
        {
            Console.WriteLine($"{welche} {Environment.NewLine}");

            Coord retval = new Coord();
            retval.X = (float)(welche);
            retval.Y = 0;
            retval.Z = 0;

            string s = $"X {retval.X},Y {retval.Y},Z {retval.Z} {Environment.NewLine}";
            
            // Diese Zeile ist wahrscheinlich falsch
            await Task.CompletedTask;
            // aber was muss dort wirklich hin?

            return s;

        }

Für die Progressbar habe ich folgendes ReportModel erstellt:


    public class ProgressReportModel
    {
        public int PercentageComplete { get; set; } = 0;
        public string CreatedPos { get; set; }        
    }


Ich habe schon einiges durchprobiert, aber es bleibt stets asynchron (also das Windows lässt sich in der Zeit nicht verschieben). Online finden sich ja einige Beispiele, aber die machen mir nicht den Eindruck, als wenn sie in meine Aufgabe hineinpassen, da "Sleep" ja nicht unbedingt zur Geschwindigkeit beiträgt.

Mein Endziel bei der ganzen Geschichte ist, später dann kartesische Koordinaten (und zwar verdammt viele) auf geänderte Bezugsframes umzurechnen. Dieser Teil funktioniert bereits (ist ja auch relativ einfache Mathematik), aber vor dem Fliegen haben die Götter ja bekanntlich das Laufen gesetzt (Gesetz bei Natur Daniel San - nicht Miyagi machen )

Thema: Wie bekomme ich Daten aus Datenbank in Viewmodel, in die OberseverableCollection und in den View?
Am im Forum: GUI: WPF und XAML

Zitat
https://caliburnmicro.com/announcements/ ( etwas runterscrollen ).

Hoppala - Dankeschön für die Info

Thema: WPF ValueConverter Radio Button IsChecked doch nicht Boolean?
Am im Forum: GUI: WPF und XAML

Zitat

Und eigentlich willst du das verhalten eines Radiobuttons haben.

Völlig richtig.
Ist der gewählt Handicap - Modus auf false, soll der andere Radio - Button aktiv sein. Im weiteren Forschen habe ich herausgefunden, daß der Converter wohl den targetType anmeckert.

Den Converter habe ich mir hier abgeschaut und ihn durch einen eigenen - sehr simplen ersetzt.


using System;
using System.Globalization;
using System.Windows.Data;

namespace DartGames_WPF.Converters
{
    public class BoolInverter : IValueConverter
    {
        object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return !(bool)value;
        }

        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return !(bool)value;
        }
    }
}

Und siehe da es geht.

@ TH69 - Ich habe natürlich in die Doku geschaut aber ich war auf einem ganz falschen Dampfer bezüglich der Fehlerursache. Unitialisierte Variablen sind in meinem Bereich der Industrieroboter ein absolutes No-Go. Und aus diesem Grund habe ich immer eine Initialisierung dabei. Ich danke Dir herzlich für Deine Antwort - die hat mir die Initialzündung gegeben.

Wie genau markiere ich das Problem jetzt als gelöst? Irgendwie finde ich da keinen Menüpunkt für.

Habt alle einen schönen Tag.

Thema: WPF ValueConverter Radio Button IsChecked doch nicht Boolean?
Am im Forum: GUI: WPF und XAML

Guten Morgen liebes Forum,

ich habe in meinem WPF - Fenster zwei Radio Buttons, deren Werte sich natürlich gegenseitig ausschliessen. Beim Laden des Fensters möchte ich die IsChecked - Eigenschaft natürlich von meinem Binding abhängig auf True oder False setzen.

Natürlich muss dann der andere Button dementsprechend den invertierten Wert anzeigen. Zu diesem Zweck habe ich einen Converter (geklaut):


namespace DartGames_WPF.Converters
{
    public class BoolToOppositeBoolConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            if (targetType != typeof(bool))
                throw new InvalidOperationException("The target must be a boolean");

            return !(bool)value;
        }

        public object ConvertBack(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
}

In der Definition für das Window habe ich dann folgendes eingebaut (scheint auch richtig zu sein):

<Window x:Class="DartGames_WPF.DartGamesEinstellungen"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DartGames_WPF"
        xmlns:wpfdude="clr-namespace:DartGames_WPF.Converters"
        mc:Ignorable="d"
        Title="DartGamesEinstellungen" Height="450" Width="800" Loaded="Window_Loaded">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
        <wpfdude:BoolToOppositeBoolConverter x:Key="oppositeConverter" />
    </Window.Resources>

Die Tatsache daß die Code - Abarbeitung in diesen Converter auch hineinspringt legt mir die Vermutung nahe, daß die Implementierung wohl korrekt ist.

Die Zeilen für die beiden Radio - Buttons und den eigentlichen Trigger:

<RadioButton  Name="rBP1Handicapped" IsChecked="{Binding  HandiCapped}" Visibility="{Binding HandicapMode, Converter={StaticResource BooleanToVisibilityConverter}}" Content="Handicap" />

<RadioButton  Name="rBP2HandiCapped" IsChecked="{Binding  HandiCapped, Converter={StaticResource oppositeConverter}}" Visibility="{Binding HandicapMode, Converter={StaticResource BooleanToVisibilityConverter}}" Content="Handicap" />

<CheckBox Name="cbHandicapMode" Grid.Column="3" Grid.Row="3" Content="Handicap Mode" IsChecked="{Binding HandicapMode}" />

(Margins und Columngedöns habe ich zur besseren Lesbarkeit hier entfernt)

Wenn also im Match (geht um Dartspiele) der Handicap - Modus nicht aktiv ist, sind diese beiden Radiobuttons nicht zu sehen - das läuft schonmal. Möchte ich aber eine Abhängigkeit des zweiten Buttons zum inversen Wert des Bindings herstellen, spuckt mir das ganze dann folgende Fehlermeldung innerhalb dieses Converters:
Fehler
System.InvalidOperationException
HResult=0x80131509
Nachricht = The target must be a boolean
Quelle = DartGames_WPF
Stapelüberwachung:
at DartGames_WPF.Converters.BoolToOppositeBoolConverter.Convert(Object value, Type targetType, Object parameter, CultureInfo culture) in C:\Users\Rolinator\Documents\Visual Studio 2019\LerneWPF\NeuesDartGames\DartGames_WPF\BoolToOppositeBoolConverter.cs:line 16
at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
at System.Windows.Data.BindingExpression.Activate(Object item)
at System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt)
at System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance)
at MS.Internal.Data.DataBindEngine.Task.Run(Boolean lastChance)
at MS.Internal.Data.DataBindEngine.Run(Object arg)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

Das wäre sicher mit Code-Behind lösbar, aber nach allem was ich über WPF gelesen habe, wäre das wohl nicht so ganz im Sinne des Erfinders. Hat da jemand eine Idee?

Vielen Dank schonmal im voraus und einen schönen Freitag gewünscht.

Thema: [Artikel] MVVM und DataBinding
Am im Forum: Artikel

Hallo Mr.Sparkle,

ich wollte nur mal Dankeschön sagen für diesen sehr gut geschriebenen Artikel. Daß ich ihn nicht beim ersten mal komplett verstanden habe, lag sicher nur an mir selber.

Und wie ich jetzt ein Binding invers abfragen und manche Controls nach einem Bool'schen Binding gar nicht anzeigen kann, danach mache ich mich jetzt auf die suche.

Oder ich muss den Artikel ein drittes mal lesen.

Und ich möchte anmerken, daß der Entschluß C# zu lernen die beste Entscheidung war, um nach meinem kleinen Schlaganfall mein altes Hirn wieder auf Geschwindigkeit zu trimmen. Danke für alles

Thema: Wie bekomme ich Daten aus Datenbank in Viewmodel, in die OberseverableCollection und in den View?
Am im Forum: GUI: WPF und XAML

Ich habe mich in den letzten Tagen auch intensiv mit diesem Thema befasst und bin auf die MVVM mittels Caliburn.Micro gestoßen.

Das Video dazu findest Du hier.

Seitdem ich mich mit WPF befasse (was etwa zwei Wochen ist) hab ich diese Videos von Tim Corey regelrecht verschlungen. Hab viel Freude damit.

<edit> Meine Erste Antwort hier 8). Bis jetzt kamen nur dämliche Fragen </edit>

Thema: DataGidView DataBinding WPF wahrscheinlich Verständnisproblem
Am im Forum: GUI: WPF und XAML

Das wonach ich tagelang gesucht habe, habe ich hier im Forum gefunden. Herzlichen Dank an alle.

Und jetzt stoße ich auf dieses Video. Ein paar Tage zu spät.

Super erklärt anhand eines Beispiels.

Thema: DataGidView DataBinding WPF wahrscheinlich Verständnisproblem
Am im Forum: GUI: WPF und XAML

Zitat von MrSparkle
Hier gibt es eine ausführliche Einführung in MVVM mit Code-Beispielen: [Artikel] MVVM und DataBinding

Herzlichen Dank. Diese Einführung habe ich mir im Vorfeld zu Gemüse geführt und - offensichtlich - nicht alles verstanden. Also arbeite ich das noch ein zweites mal durch.

Thema: DataGidView DataBinding WPF wahrscheinlich Verständnisproblem
Am im Forum: GUI: WPF und XAML

Zitat
Wenn trotzdem noch nichts angezeigt wird, benötigst du INotifyPropertyChanged in deinem ViewModel, wenn du Veränderungen im Code an der gebundenen Collection machen willst, sollte es eine ObservableCollection sein.

 
public class MatchHistoryViewModel : ViewModelBase
    { 
        public ObservableCollection<MatchViewModel> MatchHistory { get; }
        public MatchHistoryViewModel()
        {
            MatchHistory = new ObservableCollection<MatchViewModel>();
        }
        public void AddEntry(MatchViewModel i)
        {
     
            MatchHistory.Add(i);
        }    
    }

So hab ich es ja auch gemacht. Auch ein PropertyChangedEventhandler ist vorhanden, der im MatchviewModel auch brav gefeuert wird.
Zitat von Urza
Da müsstest du das Binding für das Window auch noch anpassen.
Sehr gerne - aber wie?
<Window x:Class="ListViewBinding.MainWindow"   
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ListViewBinding"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MatchHistoryViewModel/>
    </Window.DataContext>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <DataGrid x:Name="Match" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding MatchHistory}" AutoGenerateColumns="True" Margin="-23,0,22.8,0" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Width="50" Binding="{Binding ID}"/>
                <DataGridTextColumn Header="Game" Width="150" Binding="{Binding GameName}"/>
                <DataGridTextColumn Header="Sets" Width="100" Binding="{Binding Sets2Play}"/>
                <DataGridTextColumn Header="Played" Width="100" Binding="{Binding SetsPlayed}"/>
            </DataGrid.Columns>
        </DataGrid>   
    </Grid>
    
</Window>



So, und nun zeigt's was an. Ich habe in mein Modul "Test2" einfach am Ende eingefügt

Match.DataContext = MyMatchView
. Jetzt zeigt mir das DGV mit Ausnahme der ID alles an, und wenn ich Einträge editiere, werden auch brav die Ereignisse gefeuert.

Erstmal herzlichen Dank für die Antworten. Hat wer eine Idee, warum die ID nicht angezeigt wird?

Hier nochmal die MatchHistory - Klasse:


     public class MatchViewModel : ViewModelBase
    {

        private int _ID;
        private string _GameName;
        private int _Sets2Play;
        private int _SetsPlayed;
        private int _Score0;
        private int _Score1;
        private string _Player1;
        private string _Player2;

        public int ID
        {
            get { return _ID; }
            set
            {
                _ID = value;
                RaisePropertyChanged(nameof(ID));
            }
        }
        public string GameName
        {
            get { return _GameName; }
            set
            {
                _GameName = value;
                RaisePropertyChanged(nameof(GameName));
            }
        }
        public int Sets2Play
        {
            get { return _Sets2Play; }
            set
            {
                _Sets2Play = value;
                RaisePropertyChanged(nameof(_Sets2Play));
            }
        }
        public int SetsPlayed
        {
            get { return _SetsPlayed; }
            set
            {
                _SetsPlayed = value;
                RaisePropertyChanged(nameof(SetsPlayed));
            }
        }
        public int Score0
        {
            get { return _Score0; }
            set
            {
                _Score0 = value;
                RaisePropertyChanged(nameof(Score0));
            }
        }
        public int Score1
        {
            get { return _Score1; }
            set
            {
                _Score1 = value;
                RaisePropertyChanged(nameof(Score1));
            }
        }
        public string Player1
        {
            get { return _Player1; }
            set
            {
                _Player1 = value;
                RaisePropertyChanged(nameof(Player1));
            }
        }
        public string Player2
        {
            get { return _Player2; }
            set
            {
                _Player2 = value;
                RaisePropertyChanged(nameof(Player2));
            }
        }
        
    }
    public class MatchHistoryViewModel : ViewModelBase
    { 
        public ObservableCollection<MatchViewModel> MatchHistory { get; }
        public MatchHistoryViewModel()
        {
            MatchHistory = new ObservableCollection<MatchViewModel>();
        }
        public void AddEntry(MatchViewModel i)
        {
     
            MatchHistory.Add(i);
        }    
    }
    public class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName)
        {
            // Führt das Event aus und gibt den Property-Namen als Argument mit, damit WPF reagieren kann.
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

[EDIT] Auch das hat sich erledigt. Es hat sich eine negative Margin eingeschlichen (-46). Das ganze auf Null und fertig war's [/EDIT]

Thema: DataGidView DataBinding WPF wahrscheinlich Verständnisproblem
Am im Forum: GUI: WPF und XAML

Liebes Forum,

derzeit bin ich dabei, eine WinForms - Anwendung ein bißchen aufzuhübschen und auf WPF zu übertragen. Im alten Projekt habe ich mir im Hauptbildschirm Spielstände mitgeschrieben in eine dort lokale Liste die aus Einträgen meiner Klasse(das Types böse sind, habe ich hier im Forum gelernt :D) "MatchHistory" besteht.

Dann das Ganze über die Schnittstelle in mein Ergebnisformular geladen und dort mit einer ListView angezeigt. So weit - so gut.

Der neue Plan ist das ganze mit einem DataGridView anzuzeigen, das aber eine Datenbindung zu dieser Klasse hat.

In diesem Beitrag wurde das Thema angeschnitten und ich habe nach diesem Muster eine MatchHistoryViewModel - Klasse erstellt.

Jetzt fehlt mir wohl nur noch ein kleines Stück:

Ich habe eine lokale Variable vom Typen dieser Klasse erstellt:


private MatchHistoryViewModel _myMatchView = new MatchHistoryViewModel(); 
public MatchHistoryViewModel myMatchView
{
     get { return _myMatchView; }
     set 
     {
          _myMatchView = value;
     }
}


Beim Starten meines MainWindows füttere ich das mit Daten:

 
private void Test2()
{         
    foreach (string s in Enum.GetNames(typeof(MatchNames)))
   {
         MatchViewModel mv = new MatchViewModel
         { 
                ID=0,
                GameName=s,
                Sets2Play=3,
                SetsPlayed=0,
                Score0=0,
                Score1=0,
                Player1="Vika",
                Player2="Roli"
          };
          _myMatchView.AddEntry(mv);
     }
        
}

Anhand des Beispiels in dem o.a. Artikel habe ich dann versucht, die Bindung herzustellen.
<Window x:Class="ListViewBinding.MainWindow"   
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ListViewBinding"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MatchHistoryViewModel/>
    </Window.DataContext>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <DataGrid x:Name="Match" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding _myMatchview}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Width="50" Binding="{Binding ID}"/>
                <DataGridTextColumn Header="Game" Width="150" Binding="{Binding GameName}"/>
                <DataGridTextColumn Header="Sets" Width="100" Binding="{Binding Sets2Play}"/>
                <DataGridTextColumn Header="Played" Width="100" Binding="{Binding SetsPlayed}"/>
            </DataGrid.Columns>
        </DataGrid>

Aber da kommt die Fehlermeldung:
Fehler
Schweregrad Anzahl Datenkontext Bindungspfad Ziel Zieltyp Beschreibung Datei Zeile Projekt
Fehler 1 MatchHistoryViewModel _myMatchview DataGrid.ItemsSource, Name="Match" IEnumerable Die Eigenschaft "_myMatchview" wurde im Objekt vom Typ "MatchHistoryViewModel" nicht gefunden.

Es ist ja nicht so, daß es ich das dringend brauche. Aber verstehen möchte ich das Ganze endlich. Wahrscheinlich ist der Denkfehler riesig oder winzig.

Und nach der zweiten schlaflosen Nacht deswegen gehe ich jetzt heia.

Off Topic: Für alle ein gesundes neues Jahr.

Thema: K.I. für Darts Spiel
Am im Forum: Rund um die Programmierung

Hallöle.

Ich bin gerade bei der Boardsuche auf diesen Fred gestoßen. Ist das ganze noch aktuell? Ich hab das was schönes gebastelt, weil ich selbst eine Sammlung von Dartspielen gebaut habe und dort auch nach und nach einen Computergegner (Stärke 1-12) eingebaut habe.

Allerdings arbeite ich da mit "gewünschtem" Ziel und einer einstellbaren Ungenauigkeit. Das ganze aber mit Vektoren.

Thema: Wie kann ich Forms mehrsprachig machen?
Am im Forum: GUI: Windows-Forms

Das liest sich für mich wie Suaheli und hilft mir null.

Dennoch danke ich Dir herzlich für Deine Antwort. Was ich dadurch gelernt habe ist, daß ich das wohl besser sein lassen sollte. Bin wohl zu blöd

<edit>

Ich habe es jetzt so umgesetzt, wie der freundliche Vietnamese in diesem Video vorführt und es tut wirklich. Allerdings muss ich tatsächlich bei den Sprachdateien einmalig das Externe Tool laufen lassen.

Ich mag zwar dämlich sein, aber Youtube - Videos kucken kann ich noch.

Das Ganze sieht jetzt so aus:

   private void Beschriften(CultureInfo ci)
        {
            Assembly a = Assembly.Load("DartGames");
            ResourceManager rm = new ResourceManager("DartGames.Lang.Language",a);
            linkLabel1.Text = rm.GetString("str_Contact");
            Tauziehen.Text = rm.GetString("str_Tauziehen");
            label1.Text = rm.GetString("str_Power");
            Settings.Text = rm.GetString("str_Settings");
            Exit.Text = rm.GetString("str_Exit");
        }

Thema: Wie kann ich Forms mehrsprachig machen?
Am im Forum: GUI: Windows-Forms

Im Buildvorgang steht :"Eingebettete Resource" und das Tool ist der "ResXFileCodeGenerator"

Mir ist beim Nachschauen aufgefallen, dass bei einem der Namespace gefehlt hat. Aber daran lag's wohl auch nicht.

Thema: Wie kann ich Forms mehrsprachig machen?
Am im Forum: GUI: Windows-Forms

Liebe Freunde,

ich dachte eigentlich, mich von meinem Schlaganfall voll erholt zu haben bis zu dem Zeitpunkt, an dem ich in ein von mir geschriebenes Programm mehrsprachige Texte verwenden wollte.

Ich habe dieses Tutorial umgesetzt (Vorschlag 3) aber ich bekomme immer die Meldung:

Fehler
System.Resources.MissingManifestResourceException: "Für die angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass Application.Text.ResStrings.resources beim Kompilieren richtig in die Assembly DartGames eingebettet wurde, oder dass die erforderlichen Satellitenassemblys geladen werden können und vollständig signiert sind."

Hat der kleine Schlaganfall mein altes Hirn jetzt komplett fritiert?

Seit zwei Tagen suche ich überall und finde keine Lösung.

Ich habe zwei Resourcedateien angelegt mit den Namen: "ResStrings.resx" und "ResStrings.de-DE.resx".

Beim Aufruf von

      public static string getString(String pattern)
        {
            return resMgr.GetString(pattern);
        }

kommt dann die o.a. Fehlermeldung.

Aufgerufen wird das ganze so:

       public Haupt()
        {
            InitializeComponent();

            var Culture = CultureInfo.CurrentCulture;
            Localization.UpdateLanguage(Culture.ToString());
           
            string f = Localization.getString("POWERED_BY");
            // nur um ma zu kucken
            Beschriften();
        }
        private void Beschriften()
        {
            label1.Text = Localization.getString("POWERED_BY");
            linkLabel1.Text = Localization.getString("CONTACT");
            Tauziehen.Text = Localization.getString("TAUZIEHEN");
        }

Alles was ich möchte ist, einige Buttons und Labels mehrsprachig zu beschriften und diverse Meldungen (Game drawn by Stalemate wird zu: Patt) je nach Sprache des Systems ändern.

Ich danke schonmal im voraus für Eure Hilfe.

Thema: Welche Parameter verlangt List.AddRange?
Am im Forum: Grundlagen von C#

Zitat von MrSparkle
Du gibst ja auch nirgendwo einen Text an. Was sollte da auch angezeigt werden

Herzlichen Dank. Klar - das hätte ich auch selbst sehen können wenn ich weniger verzweifelt gewesen wäre.
Zitat von Th69
Und noch als Anmerkung: die SubItems werden nur im View-Mode View.Details (Spaltenansicht) angezeigt (so wie man die Ansichten auch vom Windows Explorer kennt)...

Ja und wenn man das zur Laufzeit mit "List" überschreibt, dann arbeitet man auch schön im Kreis. :D. Vielen herzlichen Dank für diesen Hinweis.

Das Problem ist hiermit gelöst und ich bedanke mich herzlich bei allen für die fruchtbaren Kommentare.

Thema: Welche Parameter verlangt List.AddRange?
Am im Forum: Grundlagen von C#

Hey Khalid,

erstmal vielen Dank für Deine schnelle Antwort.

Diese Version ist ein weiterer Versuch, daß die dämlichen SubItems überhaupt einmal angezeigt werden. Ich habe schon etliche Beispiele versucht umzusetzen, aber es zeigt sich NIX.

Auch durch Deine (herzlichen Dank nochmal) Korrektur der Syntax zeigen sich nur leere Items mit den Checkboxen vorne dran.

Thema: Welche Parameter verlangt List.AddRange?
Am im Forum: Grundlagen von C#

Liebes Forum,

bevor ich meine Frage stelle möchte ich einmal anmerken, daß ich bis jetzt jedes Problem durch die Boardsuche hier lösen konnte. Auch gefällt mir der Umgangston sehr gut.

Antworten wie: "Google" oder "such doch mal richtig" sind hier spärlich bis gar nicht zu finden.

Bei meinem aktuellen Problem habe ich nirgendwo eine Lösung gefunden. Könnte auch daran liegen, daß ich eventuell die falschen Suchbegriffe verwende.

Nun zum eigentlichen Problem:

Ich habe eine ListView (zum Abkürzen der Tippselei habe ich ihr den Namen "lv" gegeben) und möchte diese füllen. Das ist mir bis jetzt mit SubItems usw noch nie gelungen. Jetzt bin ich auf die AddRange - Methode gestoßen und daß man dort wohl eine Auflistung von Items mit einem Schlag einfügen kann. Dafür fehlt mir aber die Syntax (und ich habe schon sehr viele Versuche hinter mir).

public partial class Testform : Form
    {
        public Testform()
        {
            InitializeComponent();
        }

        private void Testform_Load(object sender, EventArgs e)
        {
            lv.View = View.List;
            lv.LabelEdit = true;
            lv.AllowColumnReorder = false;
            lv.CheckBoxes = true;
            lv.GridLines = true;

            List<ListViewItem> arrayItems = new List<ListViewItem>();

            for (int i = 0; i < 4; i++)
            {
                ListViewItem neu = new ListViewItem();
                neu.SubItems.Add((i * 10).ToString());
                neu.SubItems.Add((i * 100).ToString());

                arrayItems.Add(neu);

                


            }
           // Genau HIER finde ich nicht die richtige Syntax

??????????            lv.Items.AddRange(new ListViewItem[arrayItems]);

           // Ende von nicht gefunden.
        }
    }

Wer hilft einem dämlichen alten Sack? Für Eure Hilfe schonmal herzlichen Dank im voraus.