2012-04-29 49 views
1

我现在正在使用Silverlight的Windows Phone 7.1中工作。在WPF中,我可以使用DataTriggers更改视图来检查属性的状态,但在WP7中我意识到没有DataTriggers。如何根据状态更改视图?

为了更具体,我创建了一个有两个视图的时钟,Analogic ad Digital,我想根据属性值更改contentControl中的视图。

在此先感谢。

+1

可能是这可以帮助您http://stackoverflow.com/questions/5008625/change-v isualstate基础上,属性值 – coder

回答

2

一个选项是将ContentControl绑定到模型中的属性。然后根据另一个属性的值更新Content

下面是一个使用CheckBoxContentControl和一对夫妇的UserControls一种非常原始的例子:

XAML

<StackPanel> 
    <CheckBox Content="Swap Content" 
       IsChecked="{Binding Path=Swapper, Mode=TwoWay}" /> 
    <ContentControl Content="{Binding Path=ClockView}" /> 
</StackPanel> 

代码隐藏

public partial class MainPage : PhoneApplicationPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     this.DataContext = new MainModel(); 
    } 
} 

public class MainModel : INotifyPropertyChanged 
{ 
    private bool _swapper; 
    public bool Swapper 
    { 
     get { return _swapper; } 
     set 
     { 
      _swapper = value; 
      NotifyChanged("Swapper"); 
      SwapContent(); 
     } 
    } 

    private UserControl _clockView; 
    public UserControl ClockView 
    { 
     get { return _clockView; } 
     private set 
     { 
      _clockView = value; 
      NotifyChanged("ClockView"); 
     } 
    } 

    public void SwapContent() 
    { 
     // AnalogClock and DigitalClock are UserControls 
     if(ClockView == null || ClockView.GetType() == typeof(AnalogClock)) 
     { 
      ClockView = new DigitalClock(); 
     } 
     else 
     { 
      ClockView = new AnalogClock(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyChanged(string propName) 
    { 
     if(PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
     } 
    } 
} 
相关问题