DisplayMemberPath ne travaille pas dans WPF
Je veux afficher CustomerList\CustomerName
éléments de propriété à la ListBox
à l'aide de ItemsSource
DisplayMemberPath
propriété seulement. Mais ça ne fonctionne pas. Je ne veux pas utiliser DataContext
ou toute autre liaison à mon problème. S'il vous plaît aider.
Mon code est donné ci-dessous:
MainWindow.xaml.cs
namespace BindingAnItemControlToAList
{
///<summary>
///Interaction logic for MainWindow.xaml
///</summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class Customer
{
public string Name {get;set;}
public string LastName { get; set; }
}
public class CustomerList
{
public List<Customer> Customers { get; set; }
public List<string> CustomerName { get; set; }
public List<string> CustomerLastName { get; set; }
public CustomerList()
{
Customers = new List<Customer>();
CustomerName = new List<string>();
CustomerLastName = new List<string>();
CustomerName.Add("Name1");
CustomerLastName.Add("LastName1");
CustomerName.Add("Name2");
CustomerLastName.Add("LastName2");
Customers.Add(new Customer() { Name = CustomerName[0], LastName = CustomerLastName[0] });
Customers.Add(new Customer() { Name = CustomerName[1], LastName = CustomerLastName[1] });
}
}
}
**MainWindow.Xaml**
<Window x:Class="BindingAnItemControlToAList.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BindingAnItemControlToAList"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" >
<Window.Resources>
<local:CustomerList x:Key="Cust"/>
</Window.Resources>
<Grid Name="Grid1">
<ListBox ItemsSource="{Binding Source={StaticResource Cust}}" DisplayMemberPath="CustomerName" Height="172" HorizontalAlignment="Left" Margin="27,23,0,0" Name="lstStates" VerticalAlignment="Top" Width="245" />
</Grid>
</Window>
InformationsquelleAutor WpfBee | 2012-10-21
Vous devez vous connecter pour publier un commentaire.
Vos n'êtes pas un "collection" comme l'ItemsSource...donc vous n'avez pas obtenir quelque chose pour choisir de. Cela permettra de choisir la liste
CustomerName
.Mais vraiment, vous devez restructurer votre
CustomerList
classe...il n'y a pas besoin d'avoir des listes distinctes qui copie leName
etLastName
champs de laCustomer
- cela signifie que vous sont la duplication de données inutilement, et il est de plus possible pour que les données puissent sortir de la synchronisation avec chaque collection.Vous devriez également envisager l'utilisation de INotifyPropertyChanged, et l'utilisation de INotifyCollectionChanged sur vos classes (par exemple, utilisation
ObservableCollection
au lieu deList
, et de mettre en œuvreINotifyPropertyChanged
sur leCustomer
classe) si c'est possible de changer la collecte de données ou de.par exemple
Il ya un couple de choses ici. Tout d'abord, votre source est défini sur l'objet, mais la liste actuelle est une propriété
Customers
de l'objet. Si vous avez besoin d'utiliserSource={StaticResource Cust},Path=Customers}
. Deuxièmement, laDisplayMemberPath
doit être une propriété de l'élément, qui dans ce cas estCustomer
- de sorte que vous avez à utiliser Nom au lieu de "Nomclient". Cela fonctionne:Mes finale de cette discussion: Pour lier un itemcontrol sauf nous avons besoin de prendre soin de 3 propriétés: 1. Source - le x:Clé de [nom de la classe] qui contient la collection de propriété (dans mon cas, Cust). 2. Le chemin d'accès, il sera la propriété qui contient la collection (dans mon cas, les Clients) 3. DisplayMemberPath - la propriété réelle qui est affiché (dans mon cas c'est, Nom).