2017-07-14 91 views
1

我有一个preloader屏幕用户控件与动态文本绑定到一个单身类中的PreloaderContent属性。 Singleton,因为我只想拥有这个属性的单个实例并在我的应用程序中轻松更改它。该类是一个单例,所以我可以轻松地将INotifyPropertyChanged实现到类中,以便在属性值更改时更新UI。WPF文本绑定到单身类中的非静态属性?

下面的绑定方法反映了初始属性值。但是,每当我改变通过访问单实例的属性,这种变化不会反映..

   <TextBlock Panel.ZIndex="100" Margin="0" TextWrapping="Wrap" Text="{Binding PreloaderContent, Source={x:Static models:Loader.LoaderManager}}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="21" FontWeight="Bold" Foreground="#FFF"> 

预载辛格尔顿

{ 
    //TO-DO: Make this a singleton class to implement iNotifyPropertyChanged 
    //TO-DO: Also, potentially move this into a different directory? 
    public class Loader : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 
     private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

     private static Loader _LoaderManager = new Loader(); 
     public static Loader LoaderManager 
     { 
      get { return _LoaderManager; } 
     } 
     // Visbility parameter to determine visbility of custom preloader user control 
     private Visibility _preloader; 
     public Visibility Preloader 
     { 
      get 
      { 
       return _preloader; 
      } 
      set 
      { 
       _preloader = value; 
       if (_preloader != value) 
       { 
        _preloader = value; 
        NotifyPropertyChanged(); 
       } 
      } 
     } 

     // Textual content showing preloader message inside preloader user control 
     private string _preloaderContent; 
     public string PreloaderContent { 
      get 
      { 
       return _preloaderContent; 
      } 
      set 
      { 
       _preloaderContent = value; 
       if (_preloaderContent != value) 
       { 
        _preloaderContent = value; 
        NotifyPropertyChanged(); 
       } 
      } 
     } 

    } 
} 

XAML代码

现在,我要绑定的Text=""到PreloaderContent(它存在于另一个类中,而不是viewmodel)的属性中,但我有问题需要在值发生更改时真正反映UI中的更改。

<Grid> 
    <Border Panel.ZIndex="1000" d:IsHidden="True" Background="#80000000" Margin="0,0,0,-0.4"> 
     <Grid> 
      <TextBlock Panel.ZIndex="100" Margin="0" TextWrapping="Wrap" Text="" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="21" FontWeight="Bold" Foreground="#FFF"> 
      </TextBlock> 
      <TextBlock Panel.ZIndex="100" Margin="11,136,12,75.2" TextWrapping="Wrap" Text="Please Wait..." HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="14" FontWeight="Bold" Foreground="#FFF"/> 
     </Grid> 
    </Border> 

回答

0

无论是其他类也必须是静态的,或者您的Loader类必须有其他的类可以设置这反映在文本框中的属性。

+0

当您说“其他类”时,您是否引用与显示用户控件UI元素的View关联的ViewModel? – ryan

0

新人的错误。我正在覆盖我的Content设置器中的预加载器值

_preloader = value;