WPF组合框绑定占位符项

时间:2018-03-14 18:17:08

标签: c# wpf

我正在尝试将“假”项添加到绑定到组合框的源列表中。

<Window ...
        DataContext="{Binding Source={x:Static local:Singleton.Instance}}">
    ...
        <ComboBox ItemsSource="{Binding MyList}">

-

public List<Object> MyList{ get; private set; }

我希望将“Add New”作为不属于MyList的组合框项目, 因为我需要在其中只有适当的对象。 如果我尝试以编程方式添加它,则会引发异常,因为无法以这种方式编辑源代码。

2 个答案:

答案 0 :(得分:0)

将以下内容添加到您的XAML

IsEditable="True"
Text="Add New"

警告:如果用户选择其中一个绑定值,则无法“返回”并选择“添加新”,因为它将不再显示。此外,既然控件是可编辑的,您需要在进行任何处理之前验证内容,以避免用户输入错误值所引入的潜在错误。

答案 1 :(得分:0)

HappyNomad通过修改Combobox.Templatehttps://stackoverflow.com/a/4053371/5188233中提供了仅限xaml的解决方案。在此提案中,您不需要使用虚假物品操纵您的源列表并保持清洁。

<ComboBox ItemsSource="{Binding MyList}" ... >
    <ComboBox.Template>
        <ControlTemplate TargetType="ComboBox">
            <Grid>
                <ComboBox x:Name="cbItems" 
                    DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
                    ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource TemplatedParent}}"
                    SelectedValue ="{Binding SelectedValue, RelativeSource={RelativeSource TemplatedParent}}" 
                    />
                <TextBlock x:Name="tbItem" Text="Add New" IsHitTestVisible="False" Visibility="Hidden"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger SourceName="cbItems" Property="SelectedItem" Value="{x:Null}">
                    <Setter TargetName="tbItem" Property="Visibility" Value="Visible"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </ComboBox.Template>
</ComboBox>