在WPF应用程序中,在MVP应用程序中,我有一个组合框,用于显示从数据库获取的数据。在将项目添加到组合框之前,我希望显示默认文本,例如
“--选择团队--”
因此,在页面加载时,它会显示,在选择它时,文本应该被清除,项目应该显示。
正在从数据库中选择数据。我需要显示默认文本,直到用户从组合框中选择一项。
请给我指引
发布于 2012-07-26 22:50:44
我找到的最简单的方法是:
<ComboBox Name="MyComboBox"
IsEditable="True"
IsReadOnly="True"
Text="-- Select Team --" />
您显然需要添加其他选项,但这可能是最简单的方法。
然而,这种方法有一个缺点,那就是虽然组合框中的文本将不能编辑,但它仍然是可选的。然而,考虑到到目前为止我发现的每一个替代方案的质量和复杂性都很差,这可能是最好的选择。
发布于 2010-04-03 09:06:09
通过使用IValueConverter
,您可以在没有任何代码的情况下完成此操作。
<Grid>
<ComboBox
x:Name="comboBox1"
ItemsSource="{Binding MyItemSource}" />
<TextBlock
Visibility="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}"
IsHitTestVisible="False"
Text="... Select Team ..." />
</Grid>
这里有一个您可以重用的转换器类。
public class NullToVisibilityConverter : IValueConverter
{
#region Implementation of IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value == null ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
最后,您需要在资源部分中声明您的转换器。
<Converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />
其中Converters是放置converter类的位置。下面是一个例子:
xmlns:Converters="clr-namespace:MyProject.Resources.Converters"
这种方法非常好的一点是在你的代码中没有重复的代码。
发布于 2010-10-29 23:32:06
我喜欢Tri Q的答案,但这些值转换器使用起来很痛苦。PaulB使用事件处理程序实现了这一点,但这也是不必要的。这是一个纯XAML解决方案:
<ContentControl Content="{Binding YourChoices}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Grid>
<ComboBox x:Name="cb" ItemsSource="{Binding}"/>
<TextBlock x:Name="tb" Text="Select Something" IsHitTestVisible="False" Visibility="Hidden"/>
</Grid>
<DataTemplate.Triggers>
<Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">
<Setter TargetName="tb" Property="Visibility" Value="Visible"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
https://stackoverflow.com/questions/1426050
复制相似问题