PropertyChanged为null wpf

时间:2016-07-20 15:34:45

标签: c# wpf xaml null propertychanged

请帮帮我!!!

我有3个UserControls

我在列表用户UC列表框中选择用户

然后从SendMessage UC向数据库发送消息 当我向Db发送消息时,它必须在Correspondence UC中刷新我的聊天列表框,但问题在于我的ChatWrapper。

ChatWrapper中的PropertyChanged始终为null,我无法使用新消息刷新Correspondence UC中的ListBox

列出用户:

    public IEnumerable<EmployeesDb> getListNames
    {
        get { return Db.Instance.EmployeesDbs.ToList(); }
    }

    static EmployeesDb m_selectedUser;
    public static EmployeesDb selectedUser
    {
        get { return m_selectedUser; }
        set
        {
            if (value != null)
                m_selectedUser = value;

            Correspondence correspondence = new Correspondence();
            correspondence.CorrespondenceChat();
        }
    }
}

发送消息(我尝试刷新 - &gt; SendInfo.FirstOrDefault()。RefreshGUI();)

    public static DependencyProperty SendInfoProperty =
        DependencyProperty.Register(
        "SendInfo",
        typeof(IEnumerable<ChatWrapper>),
        typeof(SendMessage));
    public IEnumerable<ChatWrapper> SendInfo
    {
        get { return GetValue(SendInfoProperty) as IEnumerable<ChatWrapper>; }
        set { SetValue(SendInfoProperty, value); }
    }

    void SendMessageCommandExecute()
    {
        //...

        SendInfo.FirstOrDefault().RefreshGUI();

        //...
    }

ChatWrapper

        public class ChatWrapper : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            public void FirePropertyChanged(string name)
            {
                var handler = PropertyChanged;
                if (handler != null)
                    handler(this, new PropertyChangedEventArgs(name));
            }

            public void RefreshGUI()
            {
                FirePropertyChanged("message");
            }

            public ChatDb chatDb { get; set; }

            public string message
            {
                get
                {
                    return (chatDb != null) ? string.Format("{0} {1}.{2} / {3} / {4}\n{5}",
                    chatDb.FromEmployeesDb.surname,
                    chatDb.FromEmployeesDb.name[0],
                    chatDb.FromEmployeesDb.middleName[0],
                    chatDb.messageDateTime,
                    chatDb.computerName,
                    chatDb.message) : null;
                }
            }

对应

        //...
        public partial class Correspondence : UserControl, INotifyPropertyChanged
        {
            public static DependencyProperty GetCorrespondenceInfoProperty =
            DependencyProperty.Register(
            "GetCorrespondenceInfo",
            typeof(IEnumerable<ChatWrapper>),
            typeof(Correspondence),
            new PropertyMetadata(OnChanged));

            public IEnumerable<ChatWrapper> GetCorrespondenceInfo
            {
                get { return GetValue(GetCorrespondenceInfoProperty) as IEnumerable<ChatWrapper>; }
                set { SetValue(GetCorrespondenceInfoProperty, value); }
            }

            static void OnChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                var me = d as Correspondence;
               me.chat = me.GetCorrespondenceInfo;
            }

            ICollectionView m_CollectionView;

            public static IEnumerable<ChatWrapper> m_chat;
            public IEnumerable<ChatWrapper> chat
            {
                get { return m_chat; }
               set
               {
                   m_chat = value;
                   if (ListUsers.selectedUser != null)
                       CorrespondenceChat();
                   FirePropertyChanged("chat");
               }
            }

            public void CorrespondenceChat()
            {
                if (m_chat == null)
                    return;
                m_CollectionView = CollectionViewSource.GetDefaultView(m_chat);

                //...

                FirePropertyChanged("chat");
         }

通信的XAML(刷新

        <Grid>
            <ListBox x:Name="correspondenceListBox" ItemsSource="{Binding chat, RelativeSource={RelativeSource AncestorType={x:Type local:Correspondence}}}" 
        Height="auto" Grid.Row="0" Grid.Column="1" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding message}" TextWrapping="Wrap" Width="auto"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
       </Grid>

我试着写

public event PropertyChangedEventHandler PropertyChanged = delegate { };

PropertyChanged不再为null,但仍未更新

0 个答案:

没有答案