WinRT中的DataTriggers

时间:2012-10-25 19:51:37

标签: c# windows-8 microsoft-metro

据我所知,WinRT不支持DataTriggers。但是,如何解决这个问题呢?

我有一个实现了“Selected”属性的模型,扩展了INotifyPropertyChanged。如果Selected为True,我想将按钮的边框更改为Red。我只是不知道如何将属性更改链接到触发状态更改。

模型

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>

2 个答案:

答案 0 :(得分:1)

您可以使用简单的转换器(IValueConverter)。然后将border属性绑定到ViewModel中的Selected属性:

<Border BorderBrush="{Binding Selected, Converter={StaticResource MyConverter}}">

您当然需要在您的Page资源或App资源字典中放置一个资源:

<mynamespace:MyConverter x:Key="MyConverter"/>

然后在转换器中,检查值是否为True并返回红色画笔

(我刚刚写了这个,没有测试它,但你可以谷歌如何轻松地做这个东西)

答案 1 :(得分:0)