2012-09-04 2 views
3

해달라고, 이러한 문제가 : 내 모델 뷰에서 값에 따라 스타일 트리거를 작성하려면,하지만하지 작동 할 수있어(MVVM 빛) style.triggers 내가 <code>mvvm-light</code> 라이브러리를 사용하여 <code>WPF(MVVM)</code> 프로젝트를하고 있어요 작품

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; 
     }); 
... 

이 확인 될 것으로 보인다,하지만 난 위치 아무것도 햅을 변경할 때 ens. 내 명령을 확인하기 위해 모든 명령을 TextBox에 바인딩합니다. 어디에서 문제가 될 수 있습니까?

+0

양방향 바인딩을 시도 했습니까? (이것이 기본값인지 잘 모르겠습니다). '{Binding Path = Location, Mode = TwoWay} ' – McGarnagle

+0

예, 여전히 wokrs가 없습니다. – ISens

+0

런타임 중에 VS의 출력 창에 바인딩 오류가 있습니까? 그건 그렇고 비어있는 mvvmlight 프로젝트에 정확한 코드를 복사 했으므로 제대로 작동합니다. 버튼을 클릭하면리스트 뷰의 colspan이 그에 따라 변경됩니다. 그래서 코드의 다른 부분에서 뭔가 잘못되었습니다 ... – nemesv

답변

2

바인딩에 UpdateSourceTrigger=PropertyChanged을 사용해 보셨나요? 나는 비슷한 문제가있어서 그것을 해결해 주었다.

<DataTrigger Binding="{Binding Location, UpdateSourceTrigger=PropertyChanged}" Value="0"> 
    <Setter Property="Grid.ColumnSpan" Value="3"></Setter> 
</DataTrigger> 
관련 문제