@siararadek - skoro zwykły WPF jest na początek trudny to MVVM to samobójstwo. Nie ma szans żeby się nie pogubić w tych wszystkich RoutedCommands, Data Bindings, etc...
Prosty kalkulator w jednej metodzie :P (Nie wymaga żadnego XAML-a, wystarczy to wkleić do okna):
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var panel = new StackPanel();
this.Content = panel;
Func<float, float, float>[] lambdas = { (x, y) => x + y, (x, y) => x - y, (x, y) => x * y, (x, y) => x / y };
var funcs = lambdas.Zip("+-*/", (tag, name) => new Tuple<object, char>(tag, name));
var ints = Enumerable.Range(0, 10).Zip("0123456789", (tag, name) => new Tuple<object, char>(tag, name));
var content = funcs.Concat(ints);
var resultShow = new Label();
panel.Children.Add(resultShow);
var memoryShow = new Label();
panel.Children.Add(memoryShow);
float remembered = 0;
float result = 0;
foreach (var info in content)
{
var btn = new Button
{
Content = info.Item2,
Tag = info.Item1
};
btn.Click += (sender, e) =>
{
var b = (Button)sender;
if (b.Tag is int)
{
remembered = remembered * 10 + (int)b.Tag;
memoryShow.Content = remembered.ToString();
}
else
{
var l = (Func<float, float, float>)b.Tag;
result = l(result, remembered);
remembered = 0;
resultShow.Content = result.ToString();
}
};
panel.Children.Add(btn);
}
}
}