XAML绑定-App.cs

XAML绑定-App.cs,xaml,windows-phone-8,Xaml,Windows Phone 8,关于用WP8在XAML中绑定的问题 在我的App.cs中,我为类设置声明了一个公共属性。在其他xaml页面中,我需要访问该属性并将该属性传递给ConverterParameter。我不能说我找到了一个干净的方法。下面是我目前的方法,我如何做到这一点,但它只是觉得肮脏。还有别的办法吗 下面的代码发生了什么?在应用程序中加载设置数据。每当加载设置或a设置更改时,它都会删除/添加App.Current.Resource。然后,这允许我对它进行数据绑定{StaticResource{resourceNa

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

在我的App.cs中,我为类设置声明了一个公共属性。在其他xaml页面中,我需要访问该属性并将该属性传递给ConverterParameter。我不能说我找到了一个干净的方法。下面是我目前的方法,我如何做到这一点,但它只是觉得肮脏。还有别的办法吗

下面的代码发生了什么?在应用程序中加载设置数据。每当加载设置或a设置更改时,它都会删除/添加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

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

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

XAML

C#
如果是公共的,为什么不让转换器从公共位置(在转换器代码中)获取设置呢?或者,构建一个更复杂的转换器,它本身可以接受对设置的引用作为属性。问题不在于转换器接受属性。它可以接受“设置”属性。我只是想知道是否有一种方法可以引用App.cs文件中的Settings属性,而不是总是将Settings设置为App.Current.Resource.Add,这样就可以通过xaml中的StaticResource访问该属性。是的,我明白了。这就是为什么我提出了两个备选建议
或仅在转换器中包含逻辑以从全局位置检索设置。转换器检索设置的唯一方法是每次从磁盘读取数据。我不想那样做。它无法访问全局位置,因为转换器类位于可由RT和/或WP8引用的单独dll中。所以它不知道App:Application是什么,也不知道你发布的xaml代码是什么意思。您正在引用一个StaticResource,我已经在做这个工作了,但是必须通过代码设置该静态资源,并在每次更新对象时重置它。这就是我希望避免的。或者我只是糊涂了,对不起。:/另一方面,我正在考虑将App.Setting属性传递给页面的ViewController。这样我就可以把它分配给VC的属性,只需要做一个普通的{Binding Settings}。不知道为什么我以前没想到。
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
{

}