В моем приложении WP7 я хочу обновить строку ApplicationTitle на всех страницах одновременно, когда что-то меняется. Я искал способы сделать это, и люди говорят об использовании привязки данных и интерфейса INotifyPropertyChanged. Однако, используя примеры, которые я нашел, я не могу заставить это работать. Я подозреваю, что привязка неверна, но не смогла обнаружить ошибку.
У меня есть класс с именем «RegistrationQueue», который имеет следующий код:
public void Gem()
{
var settings = IsolatedStorageSettings.ApplicationSettings;
if (settings.Contains("regqueue"))
{
settings["regqueue"] = _registreringsListe;
}
else
settings.Add("regqueue", _registreringsListe);
AppTitle = "LOGIMATIC A/S - " + _registreringsListe.Count + " registreringer i kø";
}
А это:
private string _AppTitle;
// Declare the PropertyChanged event.
public event PropertyChangedEventHandler PropertyChanged;
// Create the property that will be the source of the binding.
public string AppTitle
{
get { return _AppTitle; }
set
{
_AppTitle = value;
// Call NotifyPropertyChanged when the source property
// is updated.
NotifyPropertyChanged("AppTitle");
}
}
// NotifyPropertyChanged will raise the PropertyChanged event,
// passing the source property that is being updated.
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
}
Насколько я помню, это просто копия / вставка из MSDN.
На одной из моих страниц XAML я написал это:
<TextBlock x:Name="ApplicationTitle" Text="{Binding AppTitle, Mode=OneWay}" Style="{StaticResource PhoneTextNormalStyle}" />
И я думал, что это будет работать, но это не так. Что я тут не так делаю?
Полный XAML для страницы:
<phone:PhoneApplicationPage
x:Class="FotoDokUdkast.loginScreen"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
shell:SystemTray.IsVisible="True" d:DesignHeight="696" d:DesignWidth="480">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Black">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<!--<TextBlock x:Name="ApplicationTitle" Text="LOGIMATIC A/S" Style="{StaticResource PhoneTextNormalStyle}"/>-->
<TextBlock x:Name="ApplicationTitle" Text="{Binding Path=AppTitle, Mode=OneWay}" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="FotoDok 0.5b " Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" Background="Black">
<TextBlock Height="30" HorizontalAlignment="Left" Margin="6,6,0,0" Name="textBlock1" Text="Et Logimatic program" VerticalAlignment="Top" Width="444" />
<toolkit:ListPicker Name="pickerProject" Margin="9,42,15,0" Header="Vælg projekt" ListPickerMode="Normal" ItemCountThreshold="0" FullModeHeader="Vælg projekt" Height="97" VerticalAlignment="Top" />
<Button Content="Log ind" Height="72" HorizontalAlignment="Left" Margin="6,337,0,0" Name="btnLogin" VerticalAlignment="Top" Width="444" Click="btnLogin_Click" />
<toolkit:ListPicker Header="Vælg bruger" Margin="9,145,15,292" Name="pickerUser" ListPickerMode="Normal" ItemCountThreshold="0" FullModeHeader="Vælg bruger" />
</Grid>
</Grid>
<!--Sample code showing usage of ApplicationBar-->
<phone:PhoneApplicationPage.ApplicationBar>
<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
<shell:ApplicationBarIconButton IconUri="Images/appbar.sync.rest.png" Text="Opdater projekter" Click="ApplicationBarIconButtonOpdater_Click"/>
<shell:ApplicationBarIconButton IconUri="Images/appbar.delete.rest.png" Text="Slet projekter" Click="ApplicationBarIconButtonSlet_Click"/>
<shell:ApplicationBarIconButton IconUri="Images/appbar.feature.email.rest.png" Text="Registreringer i kø" Click="ApplicationBarIconButtonRegistrering_Click"/>
<shell:ApplicationBarIconButton IconUri="Images/appbar.feature.settings.rest.png" Text="Tilpas opsætning" Click="ApplicationBarIconButtonSettings_Click"/>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
</phone:PhoneApplicationPage>
Затем я написал "DataContext =" RegistreringsKø ";" в конструкторе для страницы XAML (loginscreen.cs)