1
我现在正在使用Silverlight的Windows Phone 7.1中工作。在WPF中,我可以使用DataTriggers更改视图来检查属性的状态,但在WP7中我意识到没有DataTriggers。如何根据状态更改视图?
为了更具体,我创建了一个有两个视图的时钟,Analogic ad Digital,我想根据属性值更改contentControl中的视图。
在此先感谢。
我现在正在使用Silverlight的Windows Phone 7.1中工作。在WPF中,我可以使用DataTriggers更改视图来检查属性的状态,但在WP7中我意识到没有DataTriggers。如何根据状态更改视图?
为了更具体,我创建了一个有两个视图的时钟,Analogic ad Digital,我想根据属性值更改contentControl中的视图。
在此先感谢。
一个选项是将ContentControl
绑定到模型中的属性。然后根据另一个属性的值更新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));
}
}
}
可能是这可以帮助您http://stackoverflow.com/questions/5008625/change-v isualstate基础上,属性值 – coder