2013-03-18 4 views
0

IsEnabled 및 IsChecked 속성에 대한 다중 트리거가 있습니다. 체크 박스가 비활성화 된 후에 코드로 다시 활성화되지 않는다는 점을 제외하면 잘 작동합니다. 사전에WPF에서 바인딩을 사용하여 목록보기의 체크 박스를 다시 활성화하는 방법은 무엇입니까?

For Each checkBox As CheckBox In lstRewardsEarned.Items 
    checkBox.IsEnabled = true 

    'This writes out false! 
    Console.WriteLine(checkBox.IsEnabled) 
Next 

감사 :

<ListView ScrollViewer.ScrollChanged="lstRewardsEarned_ScrollChanged" Height="178" HorizontalAlignment="Left" Margin="12,0,0,81" Name="lstRewardsEarned" VerticalAlignment="Bottom" Width="327" SelectionMode="Multiple" Background="White" FontFamily="Calibri" FontSize="16"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 

      <!-- bind content IsSelected to the ListViewItem IsChecked --> 
      <Setter Property="IsSelected" Value="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=Explicit}" /> 

      <!-- bind content IsEnabled to the ListViewItem IsEnabled --> 
      <Setter Property="IsEnabled" Value="{Binding Path=IsEnabled, Mode=TwoWay, UpdateSourceTrigger=Explicit}" /> 

      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListBoxItem"> 
         <Border x:Name="Border" SnapsToDevicePixels="true"> 
          <ContentPresenter /> 
         </Border> 

         <ControlTemplate.Triggers> 

          <!--Highlight if IsSelected and IsEnabled--> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="True"/> 
            <Condition Property="IsEnabled" Value="True"/> 
           </MultiTrigger.Conditions> 
           <MultiTrigger.Setters> 
            <Setter TargetName="Border" Property="Background" Value="Cyan"/> 
           </MultiTrigger.Setters> 
          </MultiTrigger> 

          <!--Remove highlight if is not Selected and IsEnabled--> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="False"/> 
            <Condition Property="IsEnabled" Value="True"/> 
           </MultiTrigger.Conditions> 
           <MultiTrigger.Setters> 
            <Setter TargetName="Border" Property="Background" Value="Transparent"/> 
           </MultiTrigger.Setters> 
          </MultiTrigger> 

          <!--Add a trigger to remove the highlighting if IsEnabled is changed to false--> 
          <Trigger Property="IsEnabled" Value="False"> 
           <Setter TargetName="Border" Property="Background" Value="Transparent"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

이 체크 박스를 다시 활성화하는 코드는 다음과 같습니다 여기에 XAML입니다.

답변

0

IsEnabled 및 IsSelected 속성 바인딩에서 UpdateSourceTrigger를 가져 옵니까?

당신이 명시 적으로 UpdateSourceTrigger 값을 설정하면

According to MSDN

, 당신은 UpdateSource 방법 를 호출해야하거나 변경 다시 소스에 전파되지 않습니다.

+0

감사합니다. Matt. UpdateSourceTrigger = Explicit을 꺼내 봤는데 효과가 없습니다. IsEnabled 이벤트를 발생 시키거나 다른 것을 수정해야합니까? –

관련 문제