Sono nuovo a WPF E ho una domanda. ho il modulo Organizzazione:WPF ComboBox Associazione a ObservableCollection
class Organization : ObservableObject
{
public string OrganizationName { get; set; }
}
ho la ViewModel dell'Organizzazione:
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");
}
}
}
E ho la ViewModel di tutte le organizzazioni:
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);}}
}
e questo è il 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>
Ora, quello che ottengo negli oggetti ComboBox è il nome della classe OrganizationViewModel ma quello di cui ho bisogno è la stringa OrganizationName. Mi sembra di avere qualche legame con OrganizationName che manca ma non riesco a capire dove aggiungere se (se questo è il problema). Suppongo di poter creare una collezione di stringhe con i nomi delle organizzazioni di cui ho bisogno. Ma in futuro avrò bisogno di più proprietà nella classe organizzativa, così è il modo in cui mi serve per funzionare.
Io apprezzo tutto l'aiuto
Grande! grazie funziona, penso di averlo provato, quindi probabilmente ho sbagliato. – MentalBrake
È quasi impossibile eseguire il debug. Quando non compare nulla nell'elenco, come si suppone che qualcuno sappia che tale attributo è mancante? Comunque non ha funzionato per me. Ho legato ItemSource a ObservableCollection sul mio DataContext. 'ItemsSource =" {Binding Projects, Mode = OneWay} "', dove 'Projects' è il nome della proprietà di ObservableCollection sulla mia istanza dell'oggetto contesto dati. – Triynko
Assicurarsi di utilizzare il 'DisplayMemberPath' corretto, dovrebbe essere una proprietà con accesso pubblico. Inoltre, se si hanno gli errori di binding, è possibile vederli in VS usando la 'Finestra di output' durante il debug. –