現在、Silverlightを使用してWindowsPhone7.1で作業しています。WPFでは、DataTriggersを使用してプロパティの状態を確認するビューを変更できますが、WP7ではDataTriggersがないことに気付きました。
より具体的には、2つのビュー、Analogic ad Digitalを持つ時計を作成しており、プロパティ値に応じてcontentControlのビューを変更したいと思います。
前もって感謝します。
現在、Silverlightを使用してWindowsPhone7.1で作業しています。WPFでは、DataTriggersを使用してプロパティの状態を確認するビューを変更できますが、WP7ではDataTriggersがないことに気付きました。
より具体的には、2つのビュー、Analogic ad Digitalを持つ時計を作成しており、プロパティ値に応じてcontentControlのビューを変更したいと思います。
前もって感謝します。
ContentControl
1つのオプションは、モデルのプロパティにをバインドすることです。Content
次に、別のプロパティの値に基づいてを更新します。
CheckBox
これは、ContentControl
とを使用した非常に大雑把な例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 ) );
}
}
}