fbpx
Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC:

Accessing a MvvM value doesn't work 12 Jul 2019 18:35 #9839

  • ic2's Avatar

  • ic2

  • Topic Author


  • Posts: 749
  • In a mixed X#/C# program I have a user control showing messages in a chat like series of balloons defined in WPF as a user control. This is C# code. The client wants to be able to copy the content of a selected message to the clipboard. Now I am as far as getting in a method on Copy:

    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    // Called from WPF USer control using <CommandBinding Command="Copy" Executed="CommandBinding_Executed"/>

    {
    string cValue;
    cValue = MessagesItemsCtrl.SelectedValue.Message; // Should be message in selected control
    // Put cValue in clipboard


    But I am unable to retrieve the message content. MessagesItemsCtrl.SelectedValue is the right element on a ListView and I can see all fields in the class below (I show the first view lines) in the Immediate Window.

    But cValue = MessagesItemsCtrl.SelectedValue.Message doesn't work. I can not access Message:
    Error CS1061 'object' does not contain a definition for 'Message' and no accessible extension method 'Message' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

    All attempts to access ChatMessage (ChatMessage.Message or something) instead didn't work either

    What do I miss?
    Below parts of the code:

    Dick

    private ChatMessage _selectedChatMessage;
    public ChatMessage SelectedChatMessage
    {
    get { return _selectedChatMessage; }
    set
    {
    _selectedChatMessage = value;
    OnPropertyChanged();
    }
    }


    public class ChatMessage : ViewModelBase
    {
    public int Recno { get; set; }
    public string Message { get; set; }
    (etc)

    XAML : ListView witin the Custom Control, part of code

    <ListView x:Name="MessagesItemsCtrl" Grid.Column="1" Margin="0,5,0,0"
    ItemsSource="{Binding SelectedParticipant.Chatter}"
    ItemTemplate="{DynamicResource MessagesDataTemplate}"
    SelectedItem="{Binding SelectedChatMessage, UpdateSourceTrigger=PropertyChanged}"

    Please Log in or Create an account to join the conversation.

    Accessing a MvvM value doesn't work 12 Jul 2019 19:48 #9844

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2336
  • Hi Dick,

    what is the type of the SelectedParticipant.Chatter object? An ObservableCollection of ChatMessage objects?

    I have some of these constructs working, but in plain X# without any XAML or C#.

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Accessing a MvvM value doesn't work 12 Jul 2019 21:26 #9851

  • ic2's Avatar

  • ic2

  • Topic Author


  • Posts: 749
  • I think SelectedParticipant is a field in he ViewModel representing the user of the chat. But the problem is the message.

    I do have a workaround to access the value. But I am sure this is not how I should do it in MvvM....

    1 In the set of public ChatMessage SelectedChatMessage I add:
    ExtensionMethods.SetLastUsedMessage(_selectedChatMessage.Message);

    2 In the class ExtensionMethods I then assign the Message as passed above to a public variable of that class
    3 In the CommandBinding_Executed method, called when someone uses Ctrl C I retrieve that value again:
    cValue= ExtensionMethods.GetLastUsedMessage("");

    It's like defining a program GLOBAL in VO and use that to get an otherwise inaccessible variable the easy way....

    Dick

    Please Log in or Create an account to join the conversation.

    Accessing a MvvM value doesn't work 13 Jul 2019 05:54 #9853

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2336
  • Hi Dick,
    in MVVM you should work with databinding and possibly no fixed connection between view and vievmodel.
    You can create your own control class, create a new property and use databinding to bind it to the relativer property of your viewmodel.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    • Page:
    • 1