WPF ComboBox,显示SelectedValue即使不在ItemSource

时间:2016-11-02 03:01:44

标签: c# wpf

在WPF ComboBox中,我需要能够显示绑定的 ItemsSource 集合中不存在的 SelectedValue

我已经进行了大量的搜索,我到目前为止找到的唯一解决方案是绑定到文字属性并设置 IsEditable ="真&#34 ;.我确实在我的应用程序的另一部分使用了它,但是在这里工作不成功,因为我不能冒用户提供无效数据的风险。

在XAML中, ItemsSource 绑定到可用WorkEfforts的ObservableCollection。随着时间的推移,此列表可能会随着项目从列表中删除而变化。 SelectedValue 绑定到数据网格Title.WorkEffort上SelectedItem的属性。标题是分配给它的工作量的单独任务或更改。一旦分配到标题,它就不应该改变,即使工作量不再有效。

XAML:

<ComboBox ItemsSource="{Binding Path=WorkEfforts}"                       
SelectedValue="{Binding Path=Title.WorkEffort}"                        
DisplayMemberPath="WorkEffortString"                        
SelectedValuePath="WorkEffortString"
IsEnabled="{Path=EditMode}"/>

C#代码:

ObservableCollection<WorkEffort> WorkEfforts = client.GetWorkEfforts();// Gets a list of all active work efforts from database

public class WorkEffort
{
public int WorkEffortID { get; set; }
public string WorkEffortString { get; set; }
public string ChargeNumber { get; set; }
}     

ChangeTitle Title { get; set;} //SelectedItem on a DataGrid whose ItemsSource is an ObservableCollection of ChangeTitles



public class ChangeTitle
{
    public int CommentID { get; set; }

    public int ChangeID { get; set; }

    public int TitleID { get; set; }

    public string WorkEffort { get; set; }

}

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

您可以将Text属性与IsEditable =“True”和IsReadOnly =“True”一起使用

这里还有另一种方法How to display default text "--Select Team --" in combo box on pageload in WPF?

答案 1 :(得分:0)

只读模式中的

ComboBox不支持显示ItemSource中不存在的项目,但如果您准备进行小额交易,则可以实现类似的目标。

如果您在INotifyPropertyChanged上实施ChangeTitle并添加与boolean类似的IsAvailable属性,那么您不会从集合WorkEfforts中删除项目,而是可以将IsAvailable设置为false。

ItemContainerStyle与您的ComboBox相结合,

<ComboBox.ItemContainerStyle>
    <Style TargetType="ComboBoxItem">
         <Setter Property="IsEnabled" Value="{Binding Path=IsAvailable}"></Setter>
    </Style>
</ComboBox.ItemContainerStyle>

您可以显示不可用的项目,同时阻止用户选择它们。您可以以编程方式选择不可用的项目,但您的用户无法自行选择这些项目。