2012-05-08 4 views
3

내보기 모델에 바인딩 된 목록 상자가 있습니다. 이 뷰 모델에는 속성이 있습니다.목록 상자에서 항목을 보이지 않게 할 수 없도록 만드는 방법

이 필드를 변경하면 항목을 볼 수 있지만 해제 할 수 없습니다. 어떤 제안 누구나

public interface IRegionAreaDM 
{ 

    /// <summary> 
    /// Name of the Focus Area 
    /// </summary> 
    string RegionAreaName { get; set; } 

    /// <summary> 
    /// Determines if the Tab is currently selected. 
    /// </summary> 
    bool IsSelected { get; set; } 

    /// <summary> 
    /// Determines if the Tab is linked to any other Tab 
    /// </summary> 
    bool IsLinked { get; set; } 

    /// <summary> 
    /// 
    /// </summary> 
    bool IsActive { get; set; } 

}

각 항목은 텍스트 상자와 XAML 예를 들어 이름의 항목에 연결되어 있습니다. 체크 박스가에 isSelected와이 isActive는 ListBoxItems는 논리 에 따라 활성화/비활성화 할 수 있도록하는 것입니다 내 XAML 스타일 뒤에이

<Style TargetType="ListBoxItem"> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ListBoxItem"> 
      <Border x:Name="Bd" HorizontalAlignment="Stretch" Background="#00D05252" 
        BorderThickness="0,1" SnapsToDevicePixels="true"> 
       <!-- <StackPanel x:Name="ParamterRoot" Orientation="Horizontal"> --> 
       <Grid x:Name="ParamterRoot"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <CheckBox x:Name="ParametersCheckbox" Grid.Column="0" Margin="10,0,0,0" 
          VerticalAlignment="Center" IsChecked="{Binding IsSelected}" 
       <TextBlock Grid.Column="1" Width="Auto" Margin="20,7.5,0,7.5" 
          Text="{Binding RegionAreaName}" TextTrimming="CharacterEllipsis"> 
        <TextBlock.Style> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Style.Triggers> 
         <Trigger Property="IsMouseDirectlyOver" Value="True"> 
          <Setter Property="Cursor" Value="Hand" /> 
         </Trigger> 
         </Style.Triggers> 
        </Style> 
        </TextBlock.Style> 
       </TextBlock>     
       </Grid> 
       <!-- </StackPanel> --> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsMouseOver" Value="true"> 
       <Setter TargetName="Bd" Property="Background" Value="#FFC10000" /> 
       </Trigger> 
       <Trigger Property="IsSelected" Value="true"> 
       <Setter TargetName="Bd" Property="Background" Value="#FFC10000" /> 
       </Trigger> 
<DataTrigger Binding="{Binding IsActive}" Value="False"> 
            <Setter Property="IsEnabled" Value="False" /> 
           </DataTrigger> 

      </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
+0

모든 항목을 취소 할 수 없거나 vm 속성을 기반으로 특정 기준에 맞는 항목 만 표시 하시겠습니까? 우리가 당신을 도울 수 있도록 좀 더 자세한 정보를주십시오. –

+0

주어진 시간에 특정 기준을 충족시키는 일부 항목. –

답변

2

enter image description here

코드 같은 것을 loooks : (당신이 MVVM을 사용하면 있도록 사용 조금이 코드를 조정하지만) 당신의 패턴에 맞게

public partial class Window1 : Window 
{ 
    public List<T> Items { get; set; } 
    public Window1() 
    { 
     Items = new List<T> 
        { 
         new T{ Id = 1,Name = "qwe",IsEnabled = true}, 
         new T{ Id = 2,Name = "asd",IsEnabled = false}, 
         new T{ Id = 3,Name = "zxc",IsEnabled = true}, 
         new T{ Id = 4,Name = "rty",IsEnabled = false}, 
        }; 
     InitializeComponent();    
     DataContext = this; 
    } 
} 

public class T 
{ 
    public int Id { get; set; } 
    public String Name { get; set; } 
    public bool IsEnabled { get; set; } 
} 

XAML :

<ListBox Name="listBox1" ItemsSource="{Binding Items}" DisplayMemberPath="Name"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="IsEnabled" Value="{Binding IsEnabled,Mode=TwoWay}" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

희망 도움말

1

스타일 트리거에서 어떤 것을 변경하려면 스타일에도이 속성을 설정해야합니다! 따라서 기본 IsEnabled 설정기를 스타일에 추가하십시오.

<Style TargetType="ListBoxItem"> 
    <Setter Property="IsEnabled" Value="True" /><!-- default --> 
    ...from here your stuff 
1

IsEnabled를 설정하는 대신 트리거를 사용하여 UIElement.IsHitTestVisible 속성을 설정할 수 있습니다.

<DataTrigger Binding="{Binding IsActive}" Value="False"> 
    <Setter Property="IsHitTestVisible" Value="False" /> 
</DataTrigger> 
관련 문제