我正在使用mvvm-light库做WPF(MVVM)项目,遇到了这样的问题:我想创建依赖于我的ModelView的值的样式触发器,但它不起作用
XAML部件:
<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的部分
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。哪里会有问题呢?
发布于 2012-09-07 15:46:21
你有没有试过在你的绑定上使用UpdateSourceTrigger=PropertyChanged?我也遇到了类似的问题,这也解决了我的问题。
<DataTrigger Binding="{Binding Location, UpdateSourceTrigger=PropertyChanged}" Value="0">
<Setter Property="Grid.ColumnSpan" Value="3"></Setter>
</DataTrigger>https://stackoverflow.com/questions/12268103
复制相似问题