从几个TextBox中获取ComboBox项

时间:2012-02-28 08:52:14

标签: wpf combobox textbox

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

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

我是WPF的新手。我可能需要很多参考资料来进一步阅读有关解决方案的内容。感谢。

1 个答案:

答案 0 :(得分: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>