メインフォームにタブ コントロールを表示し、さまざまなユーザーから受信したメッセージに新しいタブを表示する小さなチャット アプリを作成しようとしています。
すべてのイベント ワイヤリングが完了し、正常に動作していますが、視覚的には、TabItems 内にデータにバインドする必要があるリストボックスがあり、実行時エラーは発生しませんが、イベントが終了してもリストボックスは空のままです。
ウィンドウのロードされたイベントにメッセージを追加すると、そのメッセージが画面に表示されますが、メッセージを受信すると、同じコードが機能しないようです。コードのブレークポイントにより、コードが実行中であり、例外がスローされていないことが確認されました。
ここに少しのコードがあります:
//Executes when there's an incoming message
[...]
public ObservableCollection<Discussion> UserDiscussionList { get; set; }
public string NewMessage { get; set; }
public Discussion CurrentDiscussion { get; set; }
public async void MessageReceived(string userName, string message)
{
await _dispatcher.InvokeAsync(() =>
{
CurrentDiscussion = UserDiscussionList[0];
CurrentDiscussion.MessageList.Add(new MessageDetail
{
Message = message,
UserName = userName
});
NewMessage = string.Empty; //resets the typed message property
});
}
[...]
これが私のxamlです:
<TabControl Grid.Row="0" ItemsSource="{Binding Path=UserDiscussionList}" SelectedItem="{Binding CurrentDiscussion, Mode=TwoWay}">
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Header"
Value="{Binding Path=Title}" />
</Style>
</TabControl.ItemContainerStyle>
<TabControl.Resources>
<DataTemplate DataType="{x:Type hub:Discussion}">
<views:DiscussionControl/>
</DataTemplate>
</TabControl.Resources>
</TabControl>
ありがとうございました!