如何根据状态更改视图

本文关键字:视图 状态 何根 | 更新日期: 2023-09-27 18:32:34

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

为了更具体,我正在创建一个时钟,其中有两个视图,模拟广告数字,我想根据属性值更改内容控件中的视图。

提前谢谢。

如何根据状态更改视图

一种选择是将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 ) );
        }
    }
}