2009-09-05 2 views
1

StackPanel에 단추를 표시하는 DataTemplate이 있습니다. 사용자가 버튼을 클릭 할 때마다 버튼이 켜져 있습니다. 그래서 필자는 필요한 DataTrigger를 템플릿에 작성하고 속성에 부울 조건을 바인딩했습니다. 나는에서 INotifyPropertyChanged 인터페이스를 구현하고 속성 ActionItems는 ObservableCollection에를 반환WPF DataTemplate 및 속성에서 이상한 동작이 발생합니다.

<DataTemplate x:Key="ActionItemsTemplate" DataType="ActionItemViewModel"> 

     <ItemsControl IsTabStop="False" ItemsSource="{Binding}" Margin="6,2"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate>      
        <StackPanel Orientation="Horizontal" />       
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 

      <ItemsControl.ItemTemplate> 
       <DataTemplate> 

        <Button x:Name="ActionButton" Command="{Binding Path=Command }" Content="{Binding Path=DisplayName}" Style="{DynamicResource HeaderButton}"/> 
        <!-- Set special values for Selected Item --> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
          <Setter TargetName="ActionButton" Property="Style" Value="{DynamicResource MainWindowSelectedButton}"/> 
          <!--Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}"--> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </DataTemplate> 

: 여기에 아래의 세부 정보입니다.

문제점 : ObservableCollection을 변경하고 INotifyPropertyChanged 이벤트를 호출하면 DataTemplate에 직접 반영되지 않고 속성 만 변경됩니다. 그러나 만약 내가 그 자체로 전체 대상을 재 해석한다면, 그것은 완벽하게 작동합니다.

예컨대

void Test1() 
     { 
      _commands[0].IsSelected = !_commands[0].IsSelected;    
      _commands[0] = _commands[0];  // Does not work If this line is commented out   
      ActionItems = _commands; 
     } 

문제는 무엇을 할 수 있을까?

편집 :이 경우 데이터 바인딩 문제가있을 수 있습니다.

TabPanel 내부의 bool 속성에 확장기 컨트롤의 IsExpanded 속성을 바인딩 한 지금 비슷한 문제가 발생했습니다. bool 속성을 토글하면 값이 뒤에서 변경되지만 디스플레이에는 반영되지 않습니다. 그러나 내가 탭을 바꾸고 돌아올 때, 나는 변화가 일어났다는 것을 안다. 이 문제와 관련이 있습니까 here?

그리고 또 나는 문제가 (조금 :) 좁혀) 할 수 있는지 궁금

편집 2 : 두 번째 문제에 대한 해결 방법 : 나는에서 INotifyPropertyChanged 인터페이스의 OnPropertyChangedEvent이 때마다 호출 할 필요가 있음을 발견 IsExpanded 속성의 프로그래밍 방식 업데이트가 업데이트되었습니다. 원래 문제에 관해서는, 이것이 사실 인 것처럼 보이지 않고, 나는 아직도 잘못되고있는 것이 무엇인지 알기 위해 노력하고 있습니다. :)

답변

0

나는 당신이 컬렉션을 교체 할 수 없다고 믿었고 그 내용 만 바꾸었다.

+0

그래, 그 내용을 변경 한 다음 INotifyPropertyChanged 이벤트 처리기를 올리면 속성의 get 메서드가 호출되고 예상 값이 반환되지만 나는 변수를 다시 할당해야합니까? 다시 한번........... – 81967

0

내가

난 당신이 여기에 무엇을 의미하는지 완전히 잘 모르겠지만, 나는 이것이 당신의 "명령"에에 isSelected 속성이 있다는 추측을 너무 바인딩있어 속성 부울 조건 그 속성에 대해 PropertyChanged를 발생시키는 것을 잊었다 고 가정합니다.

관련 문제