Как заставить кнопку сделать метод, которого нет в MainPage - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть кнопка в MainPage, для которой я хочу выполнить метод, который существует в другом классе (Shelf.cs)

Я пытался сделать click = "local: Button_click" (local = using: Shelf),он не позволил мне и продолжал хотеть добавить «новый обработчик событий»

Кнопка в MainPage.xaml:

<Button x:Name="AddBookButton" Width="150" Height="150" Margin="675,0,0,0" click="Button_click"> // this creates a new method inside MainPage

метод в Shelf.cs:

public async void Button_Click(object sender, RoutedEventArgs e)
    {
        StackPanel adddialog = new StackPanel
        {
            Orientation = Orientation.Horizontal,
            Width = 484,
            FlowDirection = FlowDirection.RightToLeft
        };
        TextBox title = new TextBox
        {
            Header = "العنوان:",
            PlaceholderText = "عنوان الكتاب",
            Width = 156,
            Margin = new Thickness(0, 0, 8, 0),
            FlowDirection = FlowDirection.RightToLeft
        };
        TextBox author = new TextBox
        {
            Header = "المؤلف:",
            PlaceholderText = "مؤلف الكتاب",
            Width = 156,
            Margin = new Thickness(0, 0, 8, 0),
            FlowDirection = FlowDirection.RightToLeft
        };
        TextBox publisher = new TextBox
        {
            Header = "الناشر (اختياري):",
            PlaceholderText = "ناشر الكتاب",
            Width = 156,
            Margin = new Thickness(0, 0, 0, 0),
            FlowDirection = FlowDirection.RightToLeft
        };

        adddialog.Children.Insert(0, title);
        adddialog.Children.Insert(1, author);
        adddialog.Children.Insert(2, publisher);
        ContentDialog addFileDialog = new ContentDialog
        {
            Title = "أضف بيانات الكتاب الجديد",
            Content = adddialog,
            PrimaryButtonText = "إضافة",
            CloseButtonText = "إلغاء",
            FlowDirection = FlowDirection.RightToLeft,
            Width = 700
        };
        ContentDialogResult result = await addFileDialog.ShowAsync();

        if (result == ContentDialogResult.Primary)
        {
            Book book = new Book()
            {
                Title = title.Text,
                Author = author.Text,
            };
            try
            {
                book.Publisher = publisher.Text;
            }
            catch { }
            Books.Add(book);
            AddBookButton.Visibility = Visibility.Collapsed;
        }
    }
}

Как мне сделать так, чтобы он шел к методу в shelf.cs?или, возможно, направить туда событие?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Вам необходимо создать экземпляр класса Shelf в классе MainForm, а затем вызвать Shelf::ShelfMethod.Имена - мои имена - см. Пример кода ниже.Мой ноутбук пока не может UWP (нужно обновить до Windows 1809), но вот пример Winforms.Я думаю, что основы создания класса и вызова метода, вероятно, одинаковы в обоих

. В форму добавьте button с именем objButton и textbox с именем objTextBox

Я назвал класс формы MainForm

Я назвал свой проект CallOtherClassMethod

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CallOtherClassMethod
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainPage());
        }
    }
}

MainPage.cs

using System.Windows.Forms;

namespace CallOtherClassMethod
{
    public partial class MainPage : Form
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void ObjButton_Click(object sender, System.EventArgs e)
        {
            Shelf objShelf = new Shelf();
            objTextBox.Text = objShelf.ShelfMethod();
        }
    }
}

Shelf.cs

namespace CallOtherClassMethod
{
    class Shelf
    {
        //Constructor (does nothing in this example)
        public Shelf()
        {
        }

        public string ShelfMethod()
        {
            return "Text sent by Shelf::ShelfMethod";
        }
    }
}

enter image description here

0 голосов
/ 12 февраля 2019

Самый правильный и лучший способ сделать это (и другие вещи) - разделить проект на три слоя, создав шаблон MVVM и используя массовое связывание данных.

Вы создаете класс AppViewModel (который реализуетINotifyProperyChanged), вы создаете для него поле в MainPage.cs, вы также объявляете класс MainPage как статическое поле, используя его как «оболочку» для всего приложения ... и вы готовы идти: вAppViewModel вы можете реализовать или ссылаться на все другие пространства имен.

С уважением

0 голосов
/ 11 февраля 2019

если я понимаю, что вы пытаетесь сказать, вы действительно не можете делать то, что пытаетесь (насколько я знаю) ... однако вы можете сделать метод нажатия кнопки в почтовом файле, вызвать другогометод в отдельном файле класса.

Если я не прав, понимая, о чем вы спрашиваете, то не могли бы вы объяснить подробнее?

...