2013-11-04 2 views
0

mainform에 탭 컨트롤을 표시하고 다른 사용자로부터받은 메시지에 따라 새 탭을 표시하는 작은 대화 앱을 만들려고합니다.tabcontrol 내의 WPF MVVM 바인딩 목록 상자

모든 이벤트 배선이 완료되고 잘 작동하지만 시각적으로는 TabItem 내부에 데이터에 바인딩해야하는 목록 상자가 있으며 런타임 오류는 발생하지 않지만 이벤트가 완료되면 목록 상자가 비어있게됩니다. 맡은 일.

로드 된 이벤트에 메시지를 추가하면 화면에 해당 메시지가 표시되지만 여전히 메시지를 받으면 동일한 코드가 작동하지 않는 것 같습니다. 코드에서 중단 점이 발생하여 예외가 발생하지 않습니다.

여기에 코드의 비트는 다음과 같습니다

<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> 

감사합니다 :

//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입니다!

+0

예, 아무 것도 나타나지 않습니다 ... –

+1

INotifyPropertyChanged를 구현합니까? –

+1

'CurrentDiscussion.MessageList'는 ObservableCollection입니까? – sthotakura

답변

0

내 MessageList를 ObservableCollection으로 선언하는 것을 깜박했습니다. <> 이렇게하면 모든 것이 완벽하게 작동합니다.