如何根据状态更改视图?

时间:2012-04-29 23:03:43

标签: c# silverlight windows-phone-7 windows-phone-7.1

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

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

提前致谢。

1 个答案:

答案 0 :(得分: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 ) );
        }
    }
}