Wie löst man mit C# diese WPF Fehlermeldung?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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.