Я новичок в WPF И у меня есть вопрос. У меня есть модуль организации:WPF ComboBox привязка к ObservableCollection
class Organization : ObservableObject
{
public string OrganizationName { get; set; }
}
я имею ViewModel Организации:
class OrganizationViewModel : ObservableObject
{
int _count = 0;
public OrganizationViewModel()
{
Organization = new Organization {OrganizationName = "New Organization"};
}
public Organization Organization { get; set; }
public string OrganizationName
{
get { return Organization.OrganizationName; }
set
{
if(Organization.OrganizationName != value)
{
Organization.OrganizationName = value;
RaisePropertyChanged("OrganizationName");
}
}
}
И у меня ViewModel всех организаций:
class AllOrganizationsViewModel
{
private ObservableCollection<OrganizationViewModel> m_organizations = new ObservableCollection<OrganizationViewModel>();
public ObservableCollection<OrganizationViewModel> Organizations
{
get { return m_organizations; }
set { m_organizations = value; }
}
public AllOrganizationsViewModel()
{
for(int i = 0; i < 3; ++i)
{
m_organizations.Add(new OrganizationViewModel());
}
}
void AddOrganizationNameExecute()
{
m_organizations.Add(new OrganizationViewModel());
}
bool CanAddOrganizationNameExecute()
{
return true;
}
public ICommand AddOrganization{get{return new RelayCommand(AddOrganizationNameExecute, CanAddOrganizationNameExecute);}}
}
И это MainWindow.xaml:
<Window x:Class="DataIntegrityChecker.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataIntegrityChecker.ViewModels" Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:AllOrganizationsViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="285*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="156" />
<ColumnDefinition Width="347*" />
</Grid.ColumnDefinitions>
<Label Content="Organization: " Margin="0,0,44,0" />
<Button Grid.Row="1" Name="UpdateOrganizations" Content="Update Organization Name" Command="{Binding AddOrganization}" Margin="0,0,0,262" HorizontalAlignment="Left" Width="156" />
<ComboBox Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Name="comboBox1" VerticalAlignment="Top" Width="155" ItemsSource="{Binding Organizations}" />
</Grid>
</Window>
Теперь, что я получаю в элементах ComboBox, это имя класса OrganizationViewModel, но мне нужна строка OrganizationName. Мне кажется, что у меня есть привязка к OrganizationName, которая отсутствует, но я не могу понять, где добавить if (если это проблема). Я предполагаю, что могу создать коллекцию строк с именами организаций, которые мне нужны. Но в будущем мне понадобится больше свойств в классе организации, так что мне нужно, чтобы он работал.
Я буду признателен за любую помощь
Отлично! спасибо, что это работает, я думаю, что я на самом деле попробовал, поэтому я, вероятно, ошибся. – MentalBrake
Отладка практически невозможна. Когда в списке ничего не отображается, как кто-то должен знать, что такой атрибут отсутствует? Для меня это все равно не работало. У меня есть ItemSource, связанный с ObservableCollection в моем DataContext. 'ItemsSource =" {Binding Projects, Mode = OneWay} "', где 'Projects' - это имя свойства ObservableCollection на экземпляре объекта контекста данных. – Triynko
Убедитесь, что вы используете правильный 'DisplayMemberPath', это должно быть свойство с открытым доступом. Кроме того, если у вас есть ошибки привязки, вы можете увидеть их в VS, используя «окно вывода» во время отладки. –