Выполнить метод из стороннего класса

180
10 ноября 2017, 06:51

Столкнулась с такой проблемой: Принимаю callback с сайта и обрабатываю его

public partial class MainWindow : Window
{
    private readonly CallbackObjectForJs _callBackObjectForJs;
    private readonly CallbackObjectSaveSettings _callbackObjectSaveSettings;
    private static XmlHelper _xmlhelper;
    public  MainWindow()
    {
        InitializeComponent();
        _xmlhelper = new XmlHelper();
        var hostInterface = new HostInterface(this);
        Browser.RegisterAsyncJsObject("hostInterface", hostInterface);
        Browser.ConsoleMessage += (s, e) =>
        {
            Debug.WriteLine($"BROWSERCONSOLE: {e.Source}:{e.Line} - {e.Message}");
        };
        _callBackObjectForJs = new CallbackObjectForJs();
        _callbackObjectSaveSettings = new CallbackObjectSaveSettings();
        Browser.RegisterAsyncJsObject("callbackObj", _callBackObjectForJs);
        Browser.RegisterAsyncJsObject("callbackObj", _callbackObjectSaveSettings);
    }
    public class CallbackObjectForJs
    {
        public void showMessage(string msg)
        {
            MessageBox.Show(msg);
        }
    }
    public class CallbackObjectSaveSettings
    {
        public void showMessage(string msg)
        {
            MessageBox.Show(msg);
        }
        public void getAuthUser(string login, string password)
        {
            _xmlhelper.UpdateSettingValue("user_login", login);
            _xmlhelper.UpdateSettingValue("user_password", UserDataProtected.Shifrovka(password, "wsprod"));
            userBarGrid.Visibility = true;  // ОШИБКА Требуется указать ссылку на объект
        }
    }
}

После чего хочу запустить метод loadUserData(), но getAuthUser ругается на не статичный метод (указывала public static void loadUserData, начинает ругаться уже внутренний код). Подскажите, пожалуйста, как это решить? Спасибо!

Answer 1

Если не вдаваться в подробности как лучше писать код и зачем вообще такое делать, а просто сконцентрироваться на том, чтобы решить ту проблему, о которой вы спрашиваете, то вы можете решть её, пробросив экземпляр вашего окна в ваши коллбеки

public class MainWindow
{
    ......
    _callbackObjectSaveSettings = new CallbackObjectSaveSettings(this);
    ......
}
public class CallbackObjectSaveSettings
{
    private MainWindow _mainWindow;
    public CallbackObjectSaveSettings(MainWindow mainWindow)
    {
        _mainWindow = mainWindow;
    }
    public void getAuthUser(string login, string password)
    {
        ......
        ......
        _mainWindow.Dispatcher.Invoke(()=> _mainWindow.userBarGrid.Visibility = true);
    }
}
READ ALSO
Excel to Word (дублирование строк)

Excel to Word (дублирование строк)

Подскажите пожалуйста, как заставить текст с других столбцов дублироваться на следующей странице, если хотя бы в 1 столбце текст не помещается...

207
Повторная регистрация типа autofac

Повторная регистрация типа autofac

Ситуация в следующемВ StartUp классе, для изоляции слоев приложения регистрирую модули

204
Как получить второе число из строки чисел с разделителем?

Как получить второе число из строки чисел с разделителем?

Есть строка чисел разделенных точкой с запятой:

292
Visual Studio режим “только для чтения”

Visual Studio режим “только для чтения”

Почему скрипт стает "только для чтения" в Visual Studio C# после нажатия "Подключить к Unity"Как я могу его потом редактировать?

198