XAML绑定 - App.cs

时间:2014-02-09 05:50:00

标签: xaml windows-phone-8

关于在XAML中使用WP8绑定的问题。

在我的App.c中,我为类Setting声明了一个公共属性。在其他xaml页面中,我需要访问该属性并将该属性传递给ConverterParameter。我不能说我找到了干净利落的方式。以下是我目前如何实现这一目标的方法,但它只是感觉很脏。还有其他方法吗?

那么下面的代码会发生什么?在应用程序中,设置数据被加载。每次加载设置或设置更改时,都会删除/添加App.Current.Resource。然后,这允许我将数据绑定到它{StaticResource {resourceName}}

同样,这种方法100%有效......但有更好/另一种方法可以实现这一目标吗?

App.cs

private static Settings _settings = null;
public static Settings Settings
{
    get { return _settings; }
    private set { _settings = value; }
}

private async void Application_Launching(object sender, LaunchingEventArgs e)
{
    if (Settings == null)
        Settings = await FlightPath.Core.Data.LoadSettingsAsync();

    App.Current.Resources.Add("Settings", App.Settings);
    Settings.SettingsChanged += Settings_SettingsChanged;
}

private void Settings_SettingsChanged(object sender, EventArgs e)
{
    if (App.Current.Resources["Settings"] == null)
        App.Current.Resources.Add("Settings", App.Settings);
    else
    {
        App.Current.Resources.Remove("Settings");
        App.Current.Resources.Add("Settings", App.Settings);
    }
}

应用程序页面XAML使用Converter / ConverterParameter

<TextBlock Text="{Binding observation_time, 
    Converter={StaticResource ZuluToLocalTimeConverter}, 
    ConverterParameter={StaticResource Settings}}"
    Style="{StaticResource PhoneTextNormalStyle}" 
    Margin="-4,0,0,0"/>

1 个答案:

答案 0 :(得分:0)

如果您使用的是MVVM,则可以创建一个具有Singleton实例的SettingManager类。然后在ViewModelBase类中声明其属性。最后将它用于你的xaml代码

XAML

C#

class ViewModelBaseClass: InotifyPropertyChanged
{
    public SettingManager Settings{get{return SettingManager.Instance;}}
}


class SettingManager
{
   public static Instance{get{...}}

   public string this[string sName]
   {
      return "whatever you need";
   }
}

  class MYViewModel: ViewModelBase
{

}