如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

2024-05-09

我正在为聊天应用程序构建 UI 设计,在尝试更新所选联系人的消息时遇到问题。 选择现有联系人,选择编辑选项,然后编辑其属性(例如用户名和图像)后,唯一进行的更改是联系人的用户名和图像。我仍然想更改 MessageModel 的用户名和图像,该消息模型作为可观察集合包含在我的 ContactModel 中。

Here is a screenshot of not edited contact: NotEditedContact

And a screenhsot of edited contact. You can se that there are only changes being applied on contacs and not in messages cards: EditedContact

这是我的 ContactModel 类代码:

namespace UV_MessagingApp.MVVM.Model
{
    public class ContactModel
    {
        public string Username { get; set; }
        public ImageSource ImageSource { get; set; }
        public ObservableCollection<MessageModel> Messages { get; set; }
        public string LastMessage => Messages.Last().Message;
    }
}

这是我的 MessageModel 类代码:

namespace UV_MessagingApp.MVVM.Model
{
    public class MessageModel
    {
        public string Username { get; set; }
        public string UsernameColor { get; set; }
        public ImageSource ImageSource { get; set; }
        public string Message { get; set; }
        public DateTime Time { get; set; }
        public bool? FirstMessage { get; set; }

    }
}

这是来自“EditContact.xaml”的绑定。我从 ContactModel 绑定了 Username 属性,并且希望实现这些更改也将应用于 MessageModel 属性。

<TextBox Grid.Column="1" Grid.Row="0" Name="contactUsername" Background="Transparent"
                             Foreground="White" BorderBrush="#292B2F" Margin="2" Padding="2"
                             Text="{Binding SelectedContact.Username, Mode=TwoWay}"/>

最后,这是 MainWindow.xaml 中的 ListView,它是显示消息的列表。您可以看到我有一个“chatItem”,其中绑定了 MessageModel 的属性:

<ListView ItemsSource="{Binding SelectedContact.Messages}"
                      Background="Transparent"
                      BorderThickness="0"
                      ItemContainerStyle="{StaticResource ChatItem}"
                      Margin="8,0,0,0"
                      Grid.Row="1">
            </ListView>

这是一个聊天项目:

<StackPanel Orientation="Horizontal">
   <Ellipse Width="30" Height="30"
            Margin="10,0,0,-5">
        <Ellipse.Fill>
            <ImageBrush ImageSource="{Binding ImageSource}"
                                        RenderOptions.BitmapScalingMode="Fant">
            </ImageBrush>
        </Ellipse.Fill>
    </Ellipse>

    <StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="{Binding Username}"
                Foreground="{Binding UsernameColor}"
                FontWeight="SemiBold"
                VerticalAlignment="Center"
                Margin="0,0,-5,0">
            </Label>

            <Label Content="{Binding Time}"
                Foreground="#44474D"
                FontWeight="SemiBold"
                VerticalAlignment="Center">
            </Label>
        </StackPanel>

        <Label Content="{Binding Message}"
            Foreground="White"
            FontWeight="SemiBold"
            VerticalAlignment="Center">
        </Label>
    </StackPanel>
</StackPanel>  

在 EditContact.caml 窗口中,我尝试传入 SelectedContact.Messages.Username 绑定,但它不起作用。所以我很感激你的帮助。

EDIT:这是已实现 INotifyPropertyChanged() 函数的 MainVievModel 类。

public class MainViewModel : ObservableObject
{
    //public ObservableCollection<MessageModel> Messages { get; set; }
    public ObservableCollection<ContactModel> Contacts { get; set; }

    /* Commands */
    public RelayCommand SendCommand { get; set; }

    private ContactModel _selectedContact;
    public  ContactModel SelectedContact
    {
        get{ return _selectedContact; }
        set
        {
            _selectedContact = value; 
            OnPropertyChanged();
        }
    }

    private string _message;
    
    public string Message
    {
        get { return _message; }
        set
        {
            _message = value;
            OnPropertyChanged();
        }
    }
    public MainViewModel()
    {
        //Messages = new ObservableCollection<MessageModel>();
        Contacts = new ObservableCollection<ContactModel>();

        // Pošiljanje sporočil
        //SendCommand = new RelayCommand(o =>
        //{
        //    Messages.Add(new MessageModel
        //
    }
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 MVVM 更新 WPF 中编辑的数据? [复制] 的相关文章

随机推荐