【问题标题】:WPF MVVM binding listbox inside tabcontrol选项卡控件内的 WPF MVVM 绑定列表框
【发布时间】:2013-11-15 13:16:51
【问题描述】:

我正在尝试创建一个小型聊天应用程序,它在主窗体上显示一个选项卡控件,并在收到来自不同用户的消息时显示新选项卡。

所有的事件连接都已完成并且运行良好,但是从视觉上看,在 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>

谢谢!

【问题讨论】:

  • 是的,没有任何显示...
  • 你实现 INotifyPropertyChanged 了吗?
  • CurrentDiscussion.MessageList 还是ObservableCollection
  • 现在我觉得自己像个智障......谢谢你让我意识到这一点......

标签: wpf data-binding mvvm listbox tabcontrol


【解决方案1】:

我忘记将我的 MessageList 声明为 ObservableCollection... 这样做可以让一切正常运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    相关资源
    最近更新 更多