我有一个ComboBox
,在只读模式下用于显示单个值(字符串)并被禁用,这是当前的实现:
<ComboBox Name="cmbSalesDocuments" SelectedValuePath="SalesDocumentId" SelectedValue="{Binding Path=SalesDocumentId, UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True,NotifyOnValidationError=True}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SalesDocumentAName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在这种模式下,我不打算用与写模式对象相同的对象绑定它,而是绑定到一个包含字符串属性SalesDocumentAName
的更轻的对象。问题是,我无法在不使用需要ItemsSource
对象的IEnumerable
集合的情况下将Displayed和Selected值设置为该属性。
答案 0 :(得分:1)
您可以编写IValueConverter
以从单个项目中获取集合
public class ObjectToCollectionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var collection = new List<object>();
if (value != null)
{
collection.Add(value);
}
return collection;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
现在您可以将ComboBox
与
<ComboBox
ItemsSource="{Binding SalesDocumentAName,Converter={StaticResource ObjectToCollectionConverter}"
SelectedItem="{Binding SalesDocumentAName, Mode=OneWay}"
IsReadOnly="true"/>
答案 1 :(得分:0)
您无法将ComboBox
绑定到string
值。 ItemsSource
属性只能绑定到IEnumerable
。您可以删除string
中的IEnumerable
个ControlTemplate
以外的所有项目。
另一种选择是使用另一个控件或修改ComboBox
。 TextBlock
不是a.anyState, a.anyState:hover, a.anyState:focus {
//css code......
}
,除非您将其看作是一个。{/ p>
答案 2 :(得分:0)
如果您没有设置ItemsSource,则可以添加一个ComboBoxItem,其内容设置为轻量级对象:
<ComboBox Name="cmbSalesDocuments" SelectedValuePath="SalesDocumentId"
SelectedValue="{Binding Path=SalesDocumentId, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True,NotifyOnValidationError=True}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SalesDocumentAName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.Items>
<ComboBoxItem Content="{Binding Path=SalesDocument}"
ContentTemplate="{Binding ItemTemplate, ElementName=cmbSalesDocuments}"/>
</ComboBox.Items>
</ComboBox>
注意:ItemsSource或Items - 一次只能使用一个属性