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 속성의 프로그래밍 방식 업데이트가 업데이트되었습니다. 원래 문제에 관해서는, 이것이 사실 인 것처럼 보이지 않고, 나는 아직도 잘못되고있는 것이 무엇인지 알기 위해 노력하고 있습니다. :)
그래, 그 내용을 변경 한 다음 INotifyPropertyChanged 이벤트 처리기를 올리면 속성의 get 메서드가 호출되고 예상 값이 반환되지만 나는 변수를 다시 할당해야합니까? 다시 한번........... – 81967