C# WinRT中的数据触发器
据我所知,WinRT中不支持DataTriggers。但是,如何解决这个问题呢 我有一个实现了“Selected”属性的模型,扩展了INotifyPropertyChanged。如果Selected为True,我想将按钮的边框更改为红色。我只是不知道如何将属性更改与触发状态更改联系起来 型号C# WinRT中的数据触发器,c#,windows-8,microsoft-metro,C#,Windows 8,Microsoft Metro,据我所知,WinRT中不支持DataTriggers。但是,如何解决这个问题呢 我有一个实现了“Selected”属性的模型,扩展了INotifyPropertyChanged。如果Selected为True,我想将按钮的边框更改为红色。我只是不知道如何将属性更改与触发状态更改联系起来 型号 class MyObject : INotifyPropertyChanged { public MyObject() { Selected = true; }
class MyObject : INotifyPropertyChanged
{
public MyObject()
{
Selected = true;
}
private bool _selected;
public bool Selected
{
get { return _selected; }
set { _selected = value; OnPropertyChanged("Selected"); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
XAML
<Grid>
<Button Margin="131,97,171,124" Content="Hello!" DataContext="MyObject" d:DataContext="{d:DesignInstance local:MyObject}">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border BorderThickness="1">
<Border.BorderBrush>
<SolidColorBrush Color="Aqua"/>
</Border.BorderBrush>
<StackPanel>
<TextBlock Text="{TemplateBinding Content}"/>
<TextBlock Text="{Binding Selected}"/>
</StackPanel>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
您可以使用一个简单的转换器(
IValueConverter
)。然后将border属性绑定到ViewModel中选定的属性:
<Border BorderBrush="{Binding Selected, Converter={StaticResource MyConverter}}">
当然,您需要将资源放在页面资源或应用程序资源字典中的某个位置:
<mynamespace:MyConverter x:Key="MyConverter"/>
然后在转换器中,检查该值是否为True
,并返回红色画笔
(我只是很快写了这篇文章,没有测试它,但你也可以用谷歌搜索如何轻松地做这件事)有一个端口你可以看看。
您发布了代码,但没有指出它有什么问题。我想问的是,当MyObject上的选定属性发生更改时,如何触发VisualState更改。因为不支持DataTriggers,所以我不知道怎么做。