在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; }
}
任何帮助将不胜感激。谢谢!
答案 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>
您可以显示不可用的项目,同时阻止用户选择它们。您可以以编程方式选择不可用的项目,但您的用户无法自行选择这些项目。