3

ライブラリを使用してWPF(MVVM)プロジェクトを実行していmvvm-lightますが、このような問題があります。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-すべてが機能します。どこで問題が発生する可能性がありますか?

4

1 に答える 1

2

UpdateSourceTrigger=PropertyChangedバインディングで使用してみましたか?私も同様の問題を抱えていましたが、それで問題は解決しました。

<DataTrigger Binding="{Binding Location, UpdateSourceTrigger=PropertyChanged}" Value="0">
     <Setter Property="Grid.ColumnSpan" Value="3"></Setter>
</DataTrigger>
于 2012-09-07T07:46:20.597 に答える