【问题标题】:Obtain ComboBox Items from several TextBoxes从多个 TextBox 中获取 ComboBox 项
【发布时间】:2012-02-28 08:52:13
【问题描述】:

在 WPF 中,如何将 TextBox 的 Text 放入 ComboBox 的 Items 中? 我看到了一个相反的问题,这意味着将 ComboBox 中的选定项绑定到 TextBox。 这是我的场景,我有一个 tabcontrol,每个 tabPage 都包含 TextBoxes。我已经完成了用于验证 TextBoxes 文本的数据绑定。现在,我需要在 tabControl 之外创建 ComboBox,以显示来自 TextBoxes 的经过验证的文本。

<Grid>
<TabControl>
<TabItem>
<TextBox />
<TextBox>
  ...
</TextBox>
</TabItem>
</TabControl>
<ComboBox   />
<ComboBox   />
</Grid>

我是 WPF 的新手。我可能需要大量参考资料来进一步阅读有关该解决方案的信息。谢谢。

【问题讨论】:

    标签: wpf combobox textbox


    【解决方案1】:

    这是一个简单的解决方案,它将在组合框中显示四个文本框的文本:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
    
        <TextBox Name="tb0" />
        <TextBox Name="tb1" Grid.Row="1" />
        <TextBox Name="tb2" Grid.Row="2" />
        <TextBox Name="tb3" Grid.Row="3" />
        <ComboBox Grid.Row="4">
            <ComboBoxItem IsSelected="True">
                <TextBlock Text="{Binding ElementName=tb0, Path=Text}" />
            </ComboBoxItem>
            <ComboBoxItem>
                <TextBlock Text="{Binding ElementName=tb1, Path=Text}" />
            </ComboBoxItem>
            <ComboBoxItem>
                <TextBlock Text="{Binding ElementName=tb2, Path=Text}" />
            </ComboBoxItem>
            <ComboBoxItem>
                <TextBlock Text="{Binding ElementName=tb3, Path=Text}" />
            </ComboBoxItem>
        </ComboBox>
    </Grid>
    

    编辑: 要在组合框中的项目为空时隐藏它们,您可以使用转换器并检查文本是否为空。

    转换器:

    public abstract class BaseConverter : MarkupExtension
    {
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
    
    public class StringToVisibilityConverter : BaseConverter, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value.ToString() != string.Empty ? Visibility.Visible : Visibility.Collapsed;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return null;
        }
    }
    

    将转换器添加为资源:

    <Window.Resources>
        <TestProject:StringToVisibilityConverter x:Key="stringToVisibilityConverter" />
    </Window.Resources>
    

    使用转换器:

    <ComboBoxItem>
        <TextBlock Text="{Binding ElementName=tb3, Path=Text}" Visibility="{Binding ElementName=tb3, Path=Text, Converter={StaticResource stringToVisibilityConverter}}" />
    </ComboBoxItem>
    

    【讨论】:

    • 感谢您的回答。我注意到组合框在其下拉列表中显示空项目。接下来是让它不显示空白项目。欢迎提出建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2011-10-13
    相关资源
    最近更新 更多