문제

나는 다음과 같은 XAML:

<TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Margin="0,0,5,0"/>
<TextBlock Text="items selected">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
                    <Setter Property="TextBlock.Text" Value="item selected"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

첫 번째 텍스트를 블록 행복하게 변화 selecteditems 는.계산,보여주는 0,1,2,etc.이 datatrigger 에서 두 번째 블록는 것을 결코 보이지 않는 화재 텍스트를 변경할 수 있습니다.

어떤 생각?

도움이 되었습니까?

해결책

이 DataTrigger 은 발사하지만의 텍스트 필드 두 번째 TextBlock 하드 코딩"항목을 선택한"그래서 그것을 할 수 없을 변경합니다.그것을 보 발사를 제거할 수 있습니다 Text="항목을 선택한".

귀하의 문제에 대한 좋은 후보를 사용하여 ValueConverterDataTrigger.을 만드는 방법은 다음과 같습니다 사용 ValueConverter 그것을 얻을 텍스트를 설정하이 무엇을 원합니다.

이 ValueConverter:

public class CountToSelectedTextConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((int)value == 1)
            return "item selected";
        else
            return "items selected";
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

추가 네임스페이스 참조하 어셈블리에 변환기 위치:

xmlns:local="clr-namespace:ValueConverterExample"

추가 컨버터를 자원:

<Window.Resources>
    <local:CountToSelectedTextConverter x:Key="CountToSelectedTextConverter"/>
</Window.Resources>

변화의 두 번째 textblock to:

    <TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count, Converter={StaticResource CountToSelectedTextConverter}}"/>

다른 팁

또는,당신은 대체할 수 있 XAML 이:

<TextBlock Margin="0,0,5,0" Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}"/>
<TextBlock>
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="items selected"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
                    <Setter Property="Text" Value="item selected"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

변환기 해결할 수 있는 바인딩의 많은 문제가 있지만,많은 전문 컨버터 얻을 매우 지저분하다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top