gpt4 book ai didi

c# - 如何将用户控件作为 ListBoxItem

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:50 27 4
gpt4 key购买 nike

我想将用户控件 (View) 绑定(bind)到 ListBoxItem。 ListBox 绑定(bind)到 ViewModel 的集合。我已将 ListBox 的 ItemTemplate 设置为:

<ListBox.ItemTemplate>
<DataTemplate>
<View:ContactView/>
</DataTemplate>
</ListBox.ItemTemplate>

但我得到的只是空白的 ListBoxItems。我可以点击它们,但没有任何视觉显示。我的 ContactView 代码非常简单:

<Border>
<DockPanel>
<StackPanel DockPanel.Dock="Right" Orientation="Vertical">
<TextBlock Text="{Binding Path=ContactFirstName, FallbackValue=FirstName}" FontWeight="Bold" Margin="5, 0, 5, 0"></TextBlock>
<TextBlock Text="{Binding Path=ContactLastName, FallbackValue=LastName}" FontWeight="Bold" Margin="5, 0, 5, 0"></TextBlock>
<TextBlock Text="{Binding Path=ContactNumber, FallbackValue=Number}" Margin="5, 0, 5, 0"></TextBlock>
</StackPanel>
</DockPanel>
</Border>

这有什么问题吗?谢谢。

最佳答案

似乎与我的示例项目配合得很好:

窗口 1 XAML:

<Window x:Class="WpfApplication7.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication7="clr-namespace:WpfApplication7"
Title="Window1" Height="300" Width="300">
<Grid>
<ListBox x:Name="myListbox">
<ListBox.ItemTemplate>
<DataTemplate>
<WpfApplication7:ContactView/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>

ContactView XAML(不需要隐藏代码;)):

<UserControl x:Class="WpfApplication7.ContactView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border>
<DockPanel>
<StackPanel DockPanel.Dock="Right" Orientation="Vertical">
<TextBlock Text="{Binding Path=ContactFirstName, FallbackValue=FirstName}" FontWeight="Bold" Margin="5, 0, 5, 0"></TextBlock>
<TextBlock Text="{Binding Path=ContactLastName, FallbackValue=LastName}" FontWeight="Bold" Margin="5, 0, 5, 0"></TextBlock>
<TextBlock Text="{Binding Path=ContactNumber, FallbackValue=Number}" Margin="5, 0, 5, 0"></TextBlock>
</StackPanel>
</DockPanel>
</Border>

</UserControl>

Window1 的隐藏代码:

public partial class Window1
{
public Window1()
{
InitializeComponent();
myListbox.ItemsSource = new[]
{
new Contact { ContactFirstName = "Stack", ContactLastName = "Overflow", ContactNumber = 1 },
new Contact { ContactFirstName = "Stack", ContactLastName = "Overflow", ContactNumber = 2 },
new Contact { ContactFirstName = "Stack", ContactLastName = "Overflow", ContactNumber = 3 },
};
}
}

public class Contact
{
public string ContactFirstName { get; set; }
public string ContactLastName { get; set; }
public int ContactNumber { get; set; }
}

我认为您的问题在于 ItemsSource 中的项目。确保绑定(bind)到正确的属性。我的联系人对象具有正确的属性。也许您的 ItemsSource 中的对象具有不同的属性名称?或者这些对象是否具有 Contact 属性,其中包含您想要的属性?

如果您的 ItemsSource 对象中有一个 Contact 属性,您可以在 TextBlock 上使用如下绑定(bind)(注意圆点):

<TextBlock Text="{Binding Path=Contact.FirstName}" FontWeight="Bold" Margin="5, 0, 5, 0"></TextBlock>

希望这有助于确定您的问题所在!

关于c# - 如何将用户控件作为 ListBoxItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2946261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com