2012-04-29 16 views
1

私はSilverlightを使用してWindows Phone 7.1で今作業しています。 WPFでは、DataTriggersを使用してプロパティの状態をチェックするビューを変更できますが、WP7ではDataTriggersがないことを認識しました。状態に応じてビューを変更するにはどうすればよいですか?

より具体的には、Analogic ad Digitalという2つのビューを持つ時計を作成しています。プロパティ値に応じてcontentControl内のビューを変更したいと考えています。

ありがとうございます。

+1

の後ろ:ここ

CheckBoxContentControlUserControlsのカップルを使用して非常に粗製の例です。 http://stackoverflow.com/questions/5008625/change-v不動産に基づく不動産価値 – coder

答えて

2

1つのオプションは、ContentControlをモデルのプロパティにバインドすることです。そして、別のプロパティの値に基づいてContentを更新します。これはあなたを助けかもしれ

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)); 
     } 
    } 
} 
関連する問題