好的,在你说什么之前我知道有多个这样的帖子存在,我正在寻找几个小时的答案。我是Stack Overflow的新用户,对C#和UWP来说相当新,所以请随时纠正我。
我正在为Windows 10制作UWP商店应用程序。
我使用API,我正在连接到服务器。
所有这些都发生在我MainPage.xaml
的单独页面中,该页面加载了Frame
!
我想要做的是在string connectionStatus
(MainPage.xaml
中更改<TextBlock/>
时LoginPage.xaml.cs
MainPage.xaml
显示INotifyPropertyChanged
{1}}框架)。我正在使用MainPage.xaml
。
如果其中任何一个没有意义,请写评论,我会尝试回答。
因此,我的<Page.DataContext>
此代码中包含绑定,NotifyChanges
代表LoginPage.xaml.cs
类(位于我的<Page.DataContext>
<local:NotifyChanges/>
</Page.DataContext>
<TextBlock Text="{Binding ConnectionStatus, Mode=OneWay}" Margin="0,0,10,0" Foreground="LimeGreen" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Right" FontSize="18"/>
中)。
NotifyChanges
以下是LoginPage.xaml.cs
我的Frame
课程,该课程已加载到我MainPage.xaml
的{{1}}内:
public class NotifyChanges : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
// This method is called by the Set accessor of each property.
// The CallerMemberName attribute that is applied to the optional propertyName
// parameter causes the property name of the caller to be substituted as an argument.
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private string connectionStatus = "Disconnected";
public string ConnectionStatus
{
get
{
return connectionStatus;
}
set
{
if (value != connectionStatus)
{
connectionStatus = value;
NotifyPropertyChanged("ConnectionStatus");
}
}
}
}
最后但同样重要的是,这是我的代码,在连接和连接后,在两个不同的位置更改connectionStatus
。
public async Task Run()
{
NotifyChanges notifyChanges = new NotifyChanges();
try
{
userToken = TokenTextBox.Text;
await client.LoginAsync(TokenType.User, userToken);
var connect = client.ConnectAsync();
notifyChanges.ConnectionStatus = client.ConnectionState.ToString();
await connect;
notifyChanges.ConnectionStatus = client.ConnectionState.ToString();
Frame.Navigate(typeof(ChatPage), userToken);
// Block this task until the program is exited.
await Task.Delay(-1);
}
catch
{
ConnectionErrorTextBlock.Text = "Something went wrong :/ You may want to check the token again!";
}
}
备注:
绑定似乎有效,因为您可以看到我已将默认值设置为&#34; Disconected&#34;并且它被设置,但之后它再也不会改变。
我调试了程序,应用程序进入NotifyChanges定义,但它从不执行notify事件,因为PropertyChanged
永远不会从Null更改。
我错过了什么吗?我的错误在别处吗?提前谢谢!
答案 0 :(得分:1)
是的,你遗失了一些东西 - 这段代码:
<Page.DataContext>
<local:NotifyChanges/>
</Page.DataContext>
和这一个:
NotifyChanges notifyChanges = new NotifyChanges();
创建两个不同的引用。使用绑定时,您希望处理该类的同一个引用。如果您的Run()
方法位于同一页面,则可能有效:
public async Task Run()
{
NotifyChanges notifyChanges = this.DataContext as NotifyChanges;
// rest of the code