Tengo una lista de objetos y estoy tratando de vincularla a un TreeView en WPF:
private List<SlideIssue> slideIssuesList = new List<SlideIssue>();
Aquí la XAML:
<Grid Grid.Row="2">
<TreeView x:Name="mainTreeView" BorderThickness="0">
</TreeView>
</Grid>
Y el intento vinculante:
TreeViewItem item = new TreeViewItem();
item.HeaderTemplate = headerTemplate;
foreach (var issue in slideIssuesList)
{
if (slideNumber == issue.SlideNumber)
{
TreeViewItem child = new TreeViewItem();
child.ItemsSource = slideIssuesList;
child.HeaderTemplate = itemTemplate;
item.Items.Add(child);
}
}
item.IsExpanded = true;
mainTreeView.Items.Add(item);
En tiempo de ejecución, esto es lo que obtengo:
Quiero acceder a las propiedades particulares del objeto "SlideIssue". ¿Cómo puedo hacer eso?
2 respuestas
Puede definir un DataTemplate
para su tipo SlideIssue
y vincular cualquier elemento de la plantilla a cualquiera de las propiedades de la clase 'public
:
<TreeView x:Name="mainTreeView" BorderThickness="0"
xmlns:local="clr-namespace:WpfApplication1">
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:SlideIssue}">
<StackPanel>
<TextBlock Text="{Binding SlideNumber}" />
<TextBlock Text="{Binding SomeOtherPropertyOfSlideIssue}" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
Cambie "WpfApplication1" al nombre de namespace
en el que se define la clase SlideIssue
.
Funciona un poco. Pero he creado una plantilla complicada en C #, así que prefiero crearla desde allí. Solo tengo un problema: ¿me pueden ayudar a escribir esta línea de código en C #?
La forma más fácil y preferida de crear un DataTemplate
mediante programación es utilizar el método XamlReader.Parse
:
DataTemplate dataTemplate = System.Windows.Markup.XamlReader.Parse("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:local=\"clr-namespace:WpfApplication1;assembly=WpfApplication1\" DataType=\"{x:Type local:SlideIssue}\"><StackPanel><TextBlock Text=\"{Binding SlideNumber}\" /><TextBlock Text=\"{Binding SomeOtherPropertyOfSlideIssue}\" /></StackPanel></DataTemplate>") as DataTemplate;
Solo recuerde reemplazar "WpfApplication1" con el nombre real del espacio de nombres y ensamblaje en el que se define su clase SlideIssue
.
Debe anular el método ToString () en la clase SlideIssue. Cuando vincula cualquier objeto para controlarlo, llame al método ToString () para imprimir datos, si ToString () no se anula, imprima el nombre de la clase de referencia.
Nuevas preguntas
c#
C # (pronunciado "see sharp") es un lenguaje de programación multi-paradigma de alto nivel, estáticamente tipado desarrollado por Microsoft. El código C # generalmente se dirige a la familia de herramientas y tiempos de ejecución .NET de Microsoft, que incluyen .NET Framework, .NET Core y Xamarin, entre otros. Use esta etiqueta para preguntas sobre el código escrito en las especificaciones formales de C # o C #.