В общем есть ComboBox в который нужно передать значения через binding из ObservableCollection. Пробовал сделать так, но выводит "First.Model.Workers". Подскажите в чем проблема и как это исправить?
.xaml
<ComboBox Margin="100,10" Height="30" Width="100" ItemsSource="{Binding Path=Workers}"/>
.cs
namespace First.Models
{
public class MainWindowViewModel : ViewModelBase
{
private ObservableCollection<Worker> _workers;
public MainWindowViewModel()
{
Workers = new ObservableCollection<Worker>()
{
new Worker {Name = "Сергей", Number = "+375(29)999-99-99", Pay = 5000},
new Worker {Name = "Вячеслав", Number = "+375(29)888-88-88", Pay = 4000},
new Worker {Name = "Франц", Number = "+375(29)777-77-77", Pay = 3000}
};
}
public ObservableCollection<Worker> Workers
{
get => _workers;
set
{
if (Equals(value, _workers)) return;
_workers = value;
RaisePropertyChanged(nameof(Workers));
}
}
}
public class Worker
{
public string Name { get; set; }
public string Number { get; set; }
public int Pay { get; set; }
}
}
Ваша проблема:
<ComboBox Margin="100,10" Height="30" Width="100" SelectedItem="{Binding Path=Workers}"/>
Вы задали привязку коллекции на выделенный элемент, т.е. как пример результат выбора элемента пользователем.
Для того что бы вывести данные в ComboBox вам необходимо привязать коллекцию элементов на поле ItemsSource.
<ComboBox Margin="100,10" Height="30" Width="100" ItemsSource="{Binding Path=Workers}"/>
Но, тут есть одно но, когда вы привяжите коллекцию, то в ComboBox'e вы увидите подобие: First.Models.Worker. Для того что бы вывести какие-то данные, вам необходимо будет задать для ComboBox DataTemplate о котором я надеюсь вы знаете.
Для решения проблемы вывода данных в каждый элемент ComboBox есть несколько решений, самое подходящее вы должны придумать сами.
DataTemplate для элементов ComboBoxToString() класса Worker.Самое простое это переопределение метода ToString:
public class Worker
{
public string Name { get; set; }
public string Number { get; set; }
public int Pay { get; set; }
public override string ToString()
{
// Данные не являются такими как нужны вам, придумайте сами как хотите их выводить.
return string.Format("{0}, {1}, {2}", Name, Number, Pay);
}
}
Задать DataTemplate, тут потребуется поработать с xaml ComboBox'a:
<ComboBox Margin="100,10" Height="30" Width="100" ItemsSource="{Binding Path=Workers}">
<ComboBox.ItemTemplate>
<DataTemplate>
<!--[ Пример является примитивным и служит лишь для показа ]-->
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{0}, {1}, {2}">
<Binding Path="Name" />
<Binding Path="Number" />
<Binding Path="Pay" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Ну контрол для сего я не стану писать, это муторно и отнимает много времени.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости