1

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

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

提前致谢。

4

1 回答 1

2

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

这是一个非常粗略的例子CheckBox,使用 aContentControl和几个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 ) );
        }
    }
}
于 2012-05-01T02:02:48.767 回答