Wie löst man mit C# diese WPF Fehlermeldung?
Hallo,
Ich bekomme immer diese Fehlermeldung beim ausführen:
CS1513
CS0229
using System.Windows;
namespace WpfApp1
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string nutzereingabe = eingabe.Text;
DataContext =
Ausgabe.GetErgebnis(int.Parse(nutzereingabe));
}
}
public class Ausgabe
{
public int Ergebnis { get; set; }
public static Ausgabe GetErgebnis (int wert)
{
Ausgabe ausgabe = new Ausgabe()
{
Ergebnis = 2 * wert
};
return ausgabe;
}
}
}
Wie löst man das?
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
C Sharp, Programmiersprache, Visual Studio
CS1513 weist auf eine fehlende geschweifte Klammer hin und CS0229 auf eine Mehrdeutigkeit eines Symbols.
Beides lässt sich anhand deines Codesnippets nicht reproduzieren, daher musst du die genauen Fehlerquellen selbst finden.
Das Problem, welches dein Programm lösen soll, würde ich übrigens anders angehen.
a) Du weist das berechnete Produkt nach klassischem MVC-Muster der Ausgabekomponente (Label o.ä.) direkt zu.
View:
<Window ...>
<StackPanel>
<TextBox x:Name="Value" />
<Button Click="DoubleValue">Double value</Button>
<Label x:Name="Output" />
</StackPanel>
</Window>
Controller (Click-Handler):
private void DoubleValue()
{
if (int.TryParse(Value.Text, out var value))
{
Output.Content = Calculator.GetDoubledValue(value);
}
}
Calculator:
public class Calculator
{
public static int GetDoubledValue(int value)
{
return 2 * value;
}
}
b) Du nutzt MVVM mit Bindings:
View:
<Window xmlns:local="clr-namespace:YourNamespace" ...>
<Window.DataContext>
<local:YourViewModel />
<Window.DataContext>
<StackPanel>
<TextBox x:Name="Value" />
<Button Command="{Binding DoubleValue}" CommandParameter="{Binding ElementName=Value, Path=Text}">Double value</Button>
<Label Content="{Binding DoubledValue}" />
</StackPanel>
</Window>
YourViewModel:
public class YourViewModel : INotifyPropertyChanged
{
private int _doubledValue;
public YourViewModel()
{
DoubleValue = new RelayCommand<object>(input =>
{
if (int.TryParse(input.ToString(), out var number))
{
DoubledValue = Calculator.GetDoubledValue(number);
}
});
}
public event PropertyChangedEventHandler PropertyChanged;
public int DoubledValue
{
get => _doubledValue;
set
{
if (value != _doubledValue)
{
_doubledValue = value;
RaisePropertyChange(nameof(DoubledValue));
}
}
}
public ICommand DoubleValue { get; }
public void RaisePropertyChange(string propertyname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
}
}
Eine RelayCommand-Implementation findest du in WPF-Frameworks oder auch hier. Die Calculator-Implementation unterscheidet sich nicht zu Weg a.