У меня есть окно, сгенерированное кодом в WPF (с использованием dotnet core 3.0 preview 6), и при запуске мое приложение получает правильные данные, а ListBox заполняется правильным количеством строк, но ни одна из них не содержит значений
Это тестовый проект, который я делаю, чтобы познакомиться с сгенерированным кодом WPF, поскольку он необходим для предстоящего проекта, который мы делаем на работе;Я бы предпочел использовать XAML, но мой ведущий говорит, что это создаст проблемы с возможностью повторного использования кода.
Сначала я убедился, что я использую «чистый» объект (мои сущности настроены для Linq2db, поэтому я удостоверился, что атрибуты не могли быть виновником), затем я протестировал привязку (только что получил код ошибки «Ошибка 40», но это не относится к основной проблеме).Я также изменил тип блоков, но это не помогает (DataGrid работал, но это не то, что я ищу в визуале).
public class ChatWindow : IChatWindow
{
private ObservableCollection<MessageDto> _observableMessages;
private readonly IMessagesRepository _messagesRepository;
public ChatWindow(IMessagesRepository messagesRepository)
{
_messagesRepository = messagesRepository;
Task.Run(async () => { await Updater(); }).ConfigureAwait(false);
}
public async Task ShowAsync(User user)
{
var chatLog = new ListBox()
{
Name = "Chatview",
ItemsSource = _observableMessages,
ItemTemplate = new DataTemplate(typeof(MessageDto)),
DataContext = _observableMessages
};
//var myBinding = new Binding("_observableMessages");
//myBinding.Source = _observableMessages;
//chatLog.SetBinding(ListBox.ItemsSourceProperty, myBinding);
var input = new TextBox()
{
Name = "InputField",
Background = new SolidColorBrush(Color.FromRgb(35, 35, 35))
};
var stackPanel = new StackPanel()
{
Children =
{
chatLog,
input
}
};
var window = new Window()
{
Name = "ChatWindow",
Content = stackPanel,
};
window.Show();
}
private async Task Updater()
{
while (true)
{
var messages = await _messagesRepository.GetAllMessages(1);
_observableMessages = new ObservableCollection<MessageDto>(messages.Select(m => new MessageDto()
{
Timestamp = m.Timestamp,
From = m.From,
Message = m.Message
}));
await Task.Delay(TimeSpan.FromSeconds(10));
}
}
}
class MessageDto
{
public DateTime Timestamp { get; set; }
public long From { get; set; }
public string Message { get; set; }
}
Изображение результирующего окна, (некоторыекод стиля был удален из примера кода, чтобы уменьшить шум)