Я стараюсь делать именно то, что написано в названии, я искал, искал и ничего.
Надеюсь, что кто-нибудь может помочь, вот в чем проблема:
У меня есть приложение, которое вам не нужно регистрировать, просто нужно войти в систему, данные поступают из веб-службы. Вот способ входа в систему.
public async Task<string> LoginAsync(string user, string pass, string company)
{
RssUser userInfos = new RssUser{ user = user, pass = pass, company = "PROJECTO_GPS" };
RootObject ro = new RootObject();
ro.rssUser = userInfos;
var jsonObj = JsonConvert.SerializeObject(ro);
using (HttpClient client = new HttpClient())
{
StringContent content = new StringContent(jsonObj.ToString(), Encoding.UTF8, "application/json");
var request = new HttpRequestMessage()
{
RequestUri = new Uri("http://evolus.ddns.net/Q4Evolution/php/phpGps/BOLoginGps.php"),
Method = HttpMethod.Post,
Content = content
};
var response = await client.SendAsync(request);
string dataResult = response.Content.ReadAsStringAsync().Result;
Debug.WriteLine(dataResult);
return dataResult;
}
}
А это класс Rss:
public class RssUser
{
private AppService _log = new AppService();
public string user { get; set; }
public string pass { get; set; }
public string company { get; set; }
public ICommand LoginCommmand
{
get
{
return new Command(async () =>
{
await _log.LoginAsync(user, pass, company);
});
}
}
}
public class RootObject
{
public RssUser rssUser { get; set; }
}
Это работает нормально, мой вопрос в том, как я могу получить имя пользователя для этого входа в систему, чтобы привязать его к панели инструментов, которая появится на странице после входа в систему.
Вот код Xaml:
<ContentPage xmlns = "http://xamarin.com/schemas/2014/forms"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:viewModels = "clr-namespace:AppQ4evo.ViewModels"
x:Class = "AppQ4evo.Menu"
NavigationPage.HasBackButton = "False">
<ContentPage.BindingContext>
<viewModels:RssUser/>
</ContentPage.BindingContext>
<ContentPage.ToolbarItems>
<ToolbarItem Name = "icon" Order = "Primary" Icon = "srw_circular.png" Priority = "0" />
<ToolbarItem Icon = "baseline_account_circle_black_18dp.png" Order = "Primary" Text = "{Binding user}" Priority = "0" />
<ToolbarItem Name = "LogOut" Order = "Primary" Text = "Log Out" Priority = "0" Clicked = "LogOut_Clicked"/>
</ContentPage.ToolbarItems>...
Дело в том, что это Text = "{Binding user}"
. Я видел много разных способов привязки, но я действительно не могу заставить ни один из них работать. Надеюсь, кто-то прояснит мне это.
Спасибо.
🤔 А знаете ли вы, что...
C# также используется для разработки игр с помощью Unity3D, популярного игрового движка.
Класс RssUser
не реализует INotifyPropertyChange, поэтому представлению никогда не сообщается, что user
изменился. Пример того, как ваш класс может выглядеть после реализации интерфейса, будет примерно таким:
class RssUser: INotifyPropertyChanged
{
private AppService _log = new AppService();
string user;
string pass;
string company;
public event PropertyChangedEventHandler PropertyChanged;
public ICommand LoginCommmand
{
get
{
return new Command(async () =>
{
await _log.LoginAsync(user, pass, company);
});
}
}
public string User
{
set
{
if (user != value)
{
user = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(User)))
}
}
get
{
return user;
}
}
// You would also want to similar for pass and company.
}
Наконец, вам нужно обновить привязку, чтобы она соответствовала общедоступному свойству User: Text = "{Binding User}"
.
Обратите внимание, что можно поместить логику изменения свойства в базовый класс и унаследовать от него свою виртуальную машину.