WPF zone de liste déroulante de la Liaison à ObservableCollection
Je suis nouveau sur WPF Et j'ai une question.
J'ai de l'Organisation du module:
class Organization : ObservableObject
{
public string OrganizationName { get; set; }
}
J'ai le ViewModel de l'Organisation:
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");
}
}
}
Et j'ai le ViewModel de toutes les Organisations:
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);}}
}
Et c'est le 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>
Maintenant, ce que je reçois dans la zone de liste déroulante d'éléments est le nom de la classe OrganizationViewModel mais ce dont j'ai besoin est le OrganizationName chaîne. Il me semble que j'ai quelques liant à OrganizationName ce qui manque, mais je ne vois pas où ajouter si (si c'est bien le problème). Je suppose que je peux faire une collection de chaînes avec les noms des organisations dont j'ai besoin. Mais dans le futur, j'aurai besoin de plus de propriétés dans l'Organisation de la Classe qui est la façon dont j'en ai besoin pour travailler.
Je vais apprécier l'aide
OriginalL'auteur MentalBrake | 2013-04-24
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter
DisplayMemberPath
:C'est presque impossible de débogage. Lorsque rien ne s'affiche dans la liste, comment quelqu'un est-il censé savoir qu'un tel attribut est manquant? Il ne fonctionne pas pour moi de toute façon. J'ai ItemSource lié à une ObservableCollection sur mon DataContext.
ItemsSource="{Binding Projects, Mode=OneWay}"
, oùProjects
est le nom de la propriété de l'ObservableCollection sur mon objet de contexte de données d'instance.Assurez-vous d'utiliser le bon
DisplayMemberPath
, il devrait être une propriété avec accesseur public. Aussi, si vous avez la liaison des erreurs, vous pouvez les voir en VS en utilisant leOutput Window
pendant le débogage.OriginalL'auteur Vyacheslav Volkov
Une autre façon, peut être par définition ItemTemplate. Elle donne plus de souplesse sur l'affichage
OriginalL'auteur Rohit Agrawal