首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(MVVM-light) style.triggers不工作

(MVVM-light) style.triggers不工作
EN

Stack Overflow用户
提问于 2012-09-05 00:58:50
回答 1查看 625关注 0票数 3

我正在使用mvvm-light库做WPF(MVVM)项目,遇到了这样的问题:我想创建依赖于我的ModelView的值的样式触发器,但它不起作用

XAML部件:

代码语言:javascript
复制
<Window...

<Window.DataContext>
        <!-- Declaratively create an instance of our Alarm View Model-->
        <local:AlarmView />
</Window.DataContext>
....

<Grid>
<Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="100" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
                    <ColumnDefinition Width="100" />
                    <ColumnDefinition Width="100" />
                    <ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Command="{Binding ChangeLocation}" Content="Click"></Button>    
<ListView 
         Grid.Row="1"
         Name="LV1" 
         ItemsSource="{Binding Items}"
         >
<ListView.Style>
            <Style TargetType="{x:Type ListView}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Location}" Value="0">
                        <Setter Property="Grid.ColumnSpan" Value="3"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Location}" Value="1">
                        <Setter Property="Grid.ColumnSpan" Value="1"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Location}" Value="2">
                        <Setter  Property="Grid.ColumnSpan" Value="2"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Location}" Value="3">
                        <Setter Property="Grid.ColumnSpan" Value="3"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.Style>    
 </ListView>
 </Grid>
 </Window>

来自ModelView的部分

代码语言:javascript
复制
class AlarmView : ViewModelBase
{
...
int _location = 0;
...
public int Location 
    {
        get { return _location; }
        set 
        {
            _location = value;
            RaisePropertyChanged("Location");
        }
    }    
...
public RelayCommand ChangeLocation { get; set; }
...
ChangeLocation = new RelayCommand(() => 
        {
            if (Location < 3)
            {
                Location++;
            }
            else Location = 0;
        });
...

这看起来没问题,但是当我改变位置时什么也不会发生。为了检查我的命令,我将它绑定到TextBox - all works。哪里会有问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-07 15:46:21

你有没有试过在你的绑定上使用UpdateSourceTrigger=PropertyChanged?我也遇到了类似的问题,这也解决了我的问题。

代码语言:javascript
复制
<DataTrigger Binding="{Binding Location, UpdateSourceTrigger=PropertyChanged}" Value="0">
     <Setter Property="Grid.ColumnSpan" Value="3"></Setter>
</DataTrigger>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12268103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档