0

メインフォームにタブ コントロールを表示し、さまざまなユーザーから受信したメッセージに新しいタブを表示する小さなチャット アプリを作成しようとしています。

すべてのイベント ワイヤリングが完了し、正常に動作していますが、視覚的には、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>

ありがとうございました!

4

1 に答える 1