我正在尝试将“假”项添加到绑定到组合框的源列表中。
<Window ...
DataContext="{Binding Source={x:Static local:Singleton.Instance}}">
...
<ComboBox ItemsSource="{Binding MyList}">
-
public List<Object> MyList{ get; private set; }
我希望将“Add New”作为不属于MyList的组合框项目, 因为我需要在其中只有适当的对象。 如果我尝试以编程方式添加它,则会引发异常,因为无法以这种方式编辑源代码。
答案 0 :(得分:0)
将以下内容添加到您的XAML
IsEditable="True"
Text="Add New"
警告:如果用户选择其中一个绑定值,则无法“返回”并选择“添加新”,因为它将不再显示。此外,既然控件是可编辑的,您需要在进行任何处理之前验证内容,以避免用户输入错误值所引入的潜在错误。
答案 1 :(得分:0)
HappyNomad通过修改Combobox.Template
在https://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>