【问题标题】:WPF ComboBox, Display SelectedValue Even If Not In ItemSourceWPF ComboBox,即使不在ItemSsource中也显示所选值
【发布时间】:2016-11-02 03:01:44
【问题描述】:

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

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

在 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; }

}

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

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

    【讨论】:

    • 请阅读 stackoverflow 提供的关于在 stackoverflow 上编写问题的建议。你的问题对你的要求不太清楚
    • 添加 IsReadOnly="True" 和 IsEditable 可以解决问题。谢谢!
    【解决方案2】:

    ComboBox在只读模式下不支持显示ItemSource中不存在的项目,但是如果你准备好进行小额交易,你可以实现类似的东西。

    如果您在ChangeTitle 上实现INotifyPropertyChanged 并添加类似于IsAvailableboolean 属性,然后可以将IsAvailable 设置为false,而不是从集合WorkEfforts 中删除项目。

    将其与ItemContainerStyle 组合为您的ComboBox,类似于,

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

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

    【讨论】:

    • ComboBox DOES 支持显示绑定到 MSDN 的集合之外的数据。
    • 我知道IsEditable 选项,但他想要的是普通只读ComboBox,它不支持请求的行为。我已经向未来的读者说明了这一点,感谢您的提醒。
    • 感谢您的回答。我最终并没有为此使用它,但它给了我一些想法,让我可以在其他地方使用它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多