2011-10-27 5 views
1

URL이 null이 아닌 경우 하이퍼 링크를 표시 할 수 있어야합니다. 그렇지 않으면 링크를 표시하고 싶지 않습니다.Wpf 변수를 기반으로 버튼을 동적으로 렌더링하는 방법

어떻게해야합니까? 지금까지 제 코드가 있습니다. 내 목록 상자 템플릿의 예 :

<ListBox.ItemTemplate>        
    <DataTemplate> 
    <StackPanel Background="#CD85C9E9" 
      Name="spListItem" 
      Orientation="Horizontal" 
      HorizontalAlignment="Stretch"> 
    <Label> 
     <TextBlock Text="{Binding Name}" /> 

     <!-- How to define if Url Is Null --> 
     <Hyperlink Name="MyLink" Click="MyLink_Click" /> 
    </Label>          
    </StackPanel> 
</DataTemplate> 
</ListBox.ItemTemplate> 

나의 등급 :

public class MyList 
{ 
    public string Name{get;set;} 
    public string? Url{get;set;} 
} 

답변

1

모든 비즈니스 로직 세부 정보가 ViewModel에 캡슐화되도록 (또는 적어도 복잡한보기 트리거가 아닌 코드에서 코드를 유지하도록) MVVM 패턴을 따르는 것이 좋습니다.

그래서 기본적으로 당신은 재산에게 올바른 URL 형식의 세부 사항이 플래그 usng의 BooleanToVisibilityConverter에보기 만 바인드 가시성에서 알고있는 모든 로직을 캡슐화

public bool IsUrlProvided { get; private set; } 

에 노출 될 수 있습니다. 당신이 로직이 ... 문자열에 대한 흐름이 완만 트리거의 사용량 같은

+1

간단한 방법 .. 내가 그것에 대해 생각하지 않은 이유를 궁금해 ... :) thnx 무리 – cpoDesign

3

두 가지 옵션 :

  1. 이에 (URL을 객체로 변환하는 사용자 정의 값 변환기를 쓰기 대/소문자)가 null인지 아닌지에 따라 가시성으로 설정하고 Visibility 속성에 설정합니다.

  2. 가시성을 false로 설정하려면 DataTrigger를 사용하십시오.

    <Hyperlink Name="MyLink" Click="MyLink_Click"> 
        <Hyperlink.Style> 
         <Style TargetType="Hyperlink"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Url}" Value="{x:Null}"> 
            <Setter Property="Visibility" Value="Collapsed"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Hyperlink.Style> 
    </Hyperlink> 
    

두 번째

더 자세한이지만, XAML에서 완전히 수행 할 수 있습니다. 그러나 첫 번째 경우에는 사용자 지정 변환기를 두 번 이상 사용하게됩니다.

그리고 방법

public string? Url{get;set;} 

String에 의해

는 참조 유형이 아직 널 (NULL)입니다.

+0

변경으로보기 때마다 변경할 필요가 없습니다 이런 식으로

<Button Visibility="{Binding IsUrlProvided, Converter={StaticResource BooleanToVisibilityConverter}}" /> 

, 그것은 단지가 null empesize했다. 귀하의 의견은 나를 트리거에 대한 자세한 내용을 읽을 수있게했다 – cpoDesign

관련 문제