Доступ к свойству поведения в viewModel - PullRequest
0 голосов
/ 03 января 2019

Я добавил поведение «DataGridSelectedItemsBehavior» в xaml:

<DataGrid  x:Name="MessagesListView" Grid.Row="0"   Style="{StaticResource BasicDataGridStyleWithAutoHeight}" 
                       ItemsSource="{Binding Source={StaticResource MessagesView}}"  AutoGenerateColumns="False" 
                       GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler"   
                       IsEnabled="{Binding IsBusy, Converter={StaticResource InvertBoolConverter}}" IsReadOnly="True"
                       SelectionMode="Extended">
                <i:Interaction.Behaviors>
                    <behaviors:DataGridSelectedItemsBehavior SelectedItems="{Binding SelectedItems, Mode=OneWayToSource}" />
                </i:Interaction.Behaviors>

Это класс DataGridSelectedItemsBehavior, и свойство «SelectedItems» работает правильно.В зависимости от того, что выбрано, эта коллекция IEnumerable заполняется.

public class DataGridSelectedItemsBehavior : Behavior<DataGrid>
    {
        protected override void OnAttached()
            => AssociatedObject.SelectionChanged += AssociatedObjectSelectionChanged;

        protected override void OnDetaching()
            => AssociatedObject.SelectionChanged -= AssociatedObjectSelectionChanged;

        private void AssociatedObjectSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var array = new object[AssociatedObject.SelectedItems.Count];
            AssociatedObject.SelectedItems.CopyTo(array, 0);
            SelectedItems = array;
        }

        public static readonly DependencyProperty SelectedItemsProperty =
            DependencyProperty.Register("SelectedItems", typeof(IEnumerable), typeof(DataGridSelectedItemsBehavior),
            new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

        public IEnumerable SelectedItems
        {
            get => (IEnumerable)GetValue(SelectedItemsProperty);
            set => SetValue(SelectedItemsProperty, value);
        }
    }

enter image description here

Я хочу иметь доступ к этому свойству в моей viewModel, чтобы скопировать всевыбрал элементы в буфер обмена и не знаю, как это правильно сделать:

public class MessagesViewModel : DialogWindowViewModel, IMessagesViewModel
{
    public ObservableCollection<IEnumerable> SelectedItems { get; set; } = new ObservableCollection<IEnumerable>();

         public MessagesViewModel(ILoggingService loggingService, ILogger logger = null)
        {
            _logger = logger;
            _loggingSvc = loggingService;
            CopyCommand = new RelayCommand(async () => await CopyLog().ConfigureAwait(false));
        }

        public RelayCommand CopyCommand { get; }

        private async Task CopyLog()
        {
            Clipboard.SetText(FormatForClipboard(SelectedItems));
        }

        FormatForClipboard()
        {
        ...
        }   
}

Спасибо за ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...