2016-12-30 3 views
0

все.C# Связывание глобальной статической строки с UWP Textblock

Кто-нибудь знает, как связать глобальную статическую строку с UWP Textblock, с изменением свойства change control?

Я пробовал много вещей, таких как:

Text="{Binding Path={local:AppSettings.StorageFolder}, Mode=OneWay}" 
Text="{x:Bind Path=(local:AppSettings.StorageFolder), RelativeSource={RelativeSource Self}, Mode=OneWay}" 

И никто не работает. Всегда какая-то ошибка появляется, как: «Вложенные типы не поддерживаются и Значение не попадает в ожидаемый диапазон»

я сумел привязать его к не статическое значение в моем классе:

Text="{x:Bind viewModel.MyValue, Mode=OneWay}" 

Любое решение этого вопроса?

Thanx.

+0

Я настоятельно рекомендую как можно больше избавиться от статических переменных. –

+0

Каков наилучший способ иметь глобальные переменные, такие как параметры приложения, которые будут отображаться на каждой странице и могут быть изменены? – user3239349

+0

Существует не специальный «лучший» способ сделать это, хотя использование глобальных/статических переменных является наихудшим. –

ответ

0

Вы просто не можете привязываться к статическому свойству в UWP так же, как вы можете в WPF. Нет x: доступно расширение статической разметки.

У вас есть несколько вариантов:

Если DataContext элемента является экземпляром типа, в котором определяется статическое свойство, можно привязать к статическому собственности как обычно:

<TextBlock Text="{Binding MyStaticProperty}" /> 

public sealed partial class BlankPage1 : Page 
{ 
    public BlankPage1() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    public static string MyStaticProperty { get { return "Static..."; } } 
} 

Если статическое свойство определено в другом классе, лучшим вариантом было бы обернуть статическое свойство в не статичный:

public sealed partial class BlankPage1 : Page 
{ 
    public BlankPage1() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    public static string MyWrapperProperty { get { return MyStaticClass.MyStaticProperty; } } 
} 

public static class MyStaticClass 
{ 
    public static string MyStaticProperty { get { return "Static..."; } } 
} 

Если вы хотите собственности чан e, нет смысла связываться со статическим свойством вообще, потому что исходный объект объекта должен реализовать интерфейс INotifyPropertyChanged, чтобы вы могли динамически обновлять целевое свойство, увеличивая событие PropertyChanged.

Вы все еще можно обернуть статическое свойство в нестатической одной из модели представления, который реализует интерфейс INotifyPropertyChanged:

public class ViewModel : INotifyPropertyChanged 
{ 
    public string MyNonStaticProperty 
    { 
     get { return MyStaticClass.MyStaticProperty; } 
     set { MyStaticClass.MyStaticProperty = value; NotifyPropertyChanged(); } 
    } 

    //... 
} 

public static class MyStaticClass 
{ 
    public static string MyStaticProperty { get; set; } 
} 

Вам obviosuly нужно вызвать NotifyPropertyChanged («MyNonStaticProperty») из модели представления класс, когда вы хотите обновить целевое свойство в представлении.

+0

Thanx, обновляя статические данные через нестационарный класс, решил мою проблему. – user3239349

Смежные вопросы