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