WPF Datatrigger 발사하지 않을 때 예상되는
-
01-07-2019 - |
문제
나는 다음과 같은 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="항목을 선택한".
귀하의 문제에 대한 좋은 후보를 사용하여 ValueConverter 대 DataTrigger.을 만드는 방법은 다음과 같습니다 사용 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>
변환기 해결할 수 있는 바인딩의 많은 문제가 있지만,많은 전문 컨버터 얻을 매우 지저분하다.
제휴하지 않습니다 StackOverflow