У меня есть эта глупая проблема.Я связываю из вида модели класса свойства типа BindableCollection со свойством ItemSource элемента управления ComboBox.
Код из класса модели представления:
public class SpiritUser
{
public string Nick { get; set; }
public string Password { get; set; }
}
public BindableCollection<SpiritUser> SpiritUsers
{
get { return _spiritUsers; }
set
{
_spiritUsers = value;
NotifyOfPropertyChange(() => SpiritUsers);
}
}
//constructor of view model class
public LogOnViewModel()
{
SpiritUsers = new BindableCollection<SpiritUser>
{
new SpiritUser
{
Nick = "Spirit_1",
Password = "slniecko1"
},
new SpiritUser
{
Nick = "Spirit_2",
Password = "slniecko1"
}
};
}
В представлении у меня есть это:
Style on comboBox:
<Style x:Key="LogOnView_NickComboBox" TargetType="{x:Type ComboBox}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Label Content="{Binding Path=Nick}" Grid.Column="0" Grid.Row="0"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Height" Value="25"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Margin" Value="10,4,10,4"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
Элемент управления ComboBox:
<ComboBox ItemsSource="{Binding Path=SpiritUsers, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource LogOnView_NickComboBox}"
SelectedValuePath="Nick"
Text="{Binding Path=Nick, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
SelectedValue="{Binding Path=Nick, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEditable="True"/>
Если я выбираю какой-либо элемент ComboBox, я вижу Spirit.Models.SpiritUser вместо текста элемента.
Причина проблемы, если comboBoxсвойство IsEditable имеет значение true.
Как я могу решить эту проблему, мне нужно свойство связывания из модели представления на comboBox, но также мне нужно иметь редактируемый comboBox и привязывать пользовательский ввод к свойству в модели представления.