public TodoItemComponent()
        {
            InitializeComponent();

            // Observe UI events
            CompleteButton.Events().Click
            .Subscribe(_ => Store.Dispatch(new CompleteTodoItemAction {
                Id = TodoItem.Id
            }));

            RevertCompleteButton.Events().Click
            .Subscribe(_ => Store.Dispatch(new RevertCompleteTodoItemAction {
                Id = TodoItem.Id
            }));

            RemoveButton.Events().Click
            .Subscribe(_ => Store.Dispatch(new RemoveTodoItemAction {
                Id = TodoItem.Id
            }));

            TextBox.Events().LostFocus
            .Subscribe(e => Store.Dispatch(new UpdateTodoItemAction {
                Id = TodoItem.Id, Content = TextBox.Text
            }));
        }
        private void Initialize()
        {
            if (TodoItem != null)
            {
                // Initialize UI
                TextBox.Text = TodoItem.Content ?? string.Empty;

                CompleteButton.HideIf(TodoItem.Completed);
                RevertCompleteButton.ShowIf(TodoItem.Completed);
            }
        }
        private void CreateButtons(Type Class, WrapPanel target)
        {
            _core.AttachTypeToRuntime(Class);
            var            items = PythonCore.GetClassMembers(Class);
            CompleteButton cb;

            foreach (var item in items)
            {
                cb              = new CompleteButton();
                cb.Content      = item.Key;
                cb.CompleteText = item.Value;
                cb.Click       += InstertButton_Click;
                cb.Margin       = new Thickness(2);
                cb.ToolTip     += _help.LookupDescription(item.Value);
                cb.Height       = 54;
                cb.Width        = 100;
                target.Children.Add(cb);
            }
        }