gpt4 book ai didi

c# - Silverlight {Binding} 不会访问类成员

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

我有一个用于 ListBoxItem 的 DataTemplate,它(应该)相当简单,只需通过 {Binding} 访问我的类的属性即可。

下面是创建 ListBox 的简单(虚拟)ItemsSource 的类和代码。

public class ChatMessage
{
public string Message = "Testing Message";
public DateTime DateReceived = new DateTime(2011, 07, 16, 14, 00, 05);

public override string ToString()
{
return Message;
}
}

// ....

// Dummy Data
ObservableCollection<ChatMessage> chatItems = new ObservableCollection<ChatMessage>();
for (int i = 0; i < 20; i++)
chatItems.Add(new ChatMessage());
lbMessages.ItemsSource = chatItems;

这是我的数据模板..

<DataTemplate x:Key="ChatItemListBox">
<Grid Width="362">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="26" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding Message}" />
<TextBlock Grid.Row="1"Text="{Binding DateReceived}"/>
</Grid>
</DataTemplate>

出于某种原因,两个 TextBlock 都是空的。但是,如果我将例如 {Binding Message} 更改为 {Binding},它将调用 ToString 并显示消息。

我知道我一定遗漏了一些非常简单的东西..

以防万一,ListBox 定义如下:

<ListBox x:Name="lbMessages" Margin="0,8,0,72" ItemTemplate="{StaticResource ChatItemListBox}"/>

最佳答案

您应该使用属性,而不是字段。

public class ChatMessage
{
public string Message { get; set; }
public DateTime DateReceived { get; set; }

public override string ToString()
{
return Message;
}

public ChatMessage()
{
Message = "Testing Message";
DateReceived = new DateTime(2011, 07, 16, 14, 00, 05);
}
}

这是因为绑定(bind)对非 DependencyProperties 使用反射,并且不查找字段。

(这个建议可以解决 WPF 的问题,但 Silverlight 可能还有一些额外的问题。)

关于c# - Silverlight {Binding} 不会访问类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6724435/

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