Столкнулась с такой проблемой: Принимаю 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, начинает ругаться уже внутренний код). Подскажите, пожалуйста, как это решить? Спасибо!
Если не вдаваться в подробности как лучше писать код и зачем вообще такое делать, а просто сконцентрироваться на том, чтобы решить ту проблему, о которой вы спрашиваете, то вы можете решть её, пробросив экземпляр вашего окна в ваши коллбеки
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);
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей