목록 뷰를 포함하는 usercontrol이있는 메인 윈도우가 있습니다. 사용자 정의 컨트롤에는 listview의 모든 내용을 클립 보드에 복사하는 버튼이 있습니다. 복사 기능이 구현 된 방법입니다. 복사에 관한 UserControl을의 뷰 모델의 코드 아래사용자 컨트롤의 뷰 모델에 대한 주 윈도우의 뷰 모델에서 KeyBinding의 링크 명령 commandbindings
public class AttachedProperties
{
public static DependencyProperty CommandBindingsProperty =
DependencyProperty.RegisterAttached("CommandBindings", typeof(CommandBindingCollection), typeof(AttachedProperties),
new PropertyMetadata(null, OnCommandBindingsChanged));
public static void SetCommandBindings(UIElement element, CommandBindingCollection value)
{
if (element != null)
element.SetValue(CommandBindingsProperty, value);
}
public static CommandBindingCollection GetCommandBindings(UIElement element)
{
return (element != null ? (CommandBindingCollection)element.GetValue (CommandBindingsProperty) : null);
}
}
한다 - 코드 아래에있다 -
<Button Command="Copy"
CommandTarget="{Binding ElementName=testCodeView}"
CommandParameter="Copy"
</Button>
<ListView x:Name="testCodeView"
ItemsSource="{Binding Products}" BorderThickness="0" Grid.Row="1"
ItemTemplate="{StaticResource testViewTemplate}"
ItemContainerStyle="{StaticResource testCodesListItem}"
infra:AttachedProperties.CommandBindings ="{Binding CommandBindings}">
</ListView>
AttachedProperties 클래스는 종속성 속성 "있는 CommandBindings을"보유 - 아래 은 UserControl을의 XAML의 일부입니다 listview의 항목.
public class UserControlViewModel : INotifyPropertyChanged
{
public CommandBindingCollection CommandBindings
{
get
{
if (commandBindings_ == null)
{
commandBindings_ = new CommandBindingCollection();
}
return commandBindings_;
}
}
public UserControlViewModel
{
CommandBinding copyBinding = new CommandBinding(ApplicationCommands.Copy,
this.CtrlCCopyCmdExecuted, this.CtrlCCopyCmdCanExecute);
// Register binding to class
CommandManager.RegisterClassCommandBinding(typeof(UserControlViewModel), copyBinding);
this.CommandBindings.Add(copyBinding);
}
private void CtrlCCopyCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
copyToclipboard_.CtrlCCopyCmdExecuted(sender, e);
}
}
CtrlCCopyCmdExecuted 함수 송신자 개체 학습과 그 컨텐츠를 복사 사용된다 UserControl을리스트 뷰에서이다. 모든 기능 복사는 사용자 정의 컨트롤의 버튼으로 잘 작동합니다. mainwindow에서 복사 기능을위한 키 바인딩을 만들어야합니다. MainWindowViewModel에서 명령을 정의 할 때 잘 작동하는 mainwindow에서 다른 키 바인딩을 만들었지 만 모든 명령을 복사하는 commandbindings는 usercontrol의 뷰 모델에 있기 때문에 mainwindowviewmodel에서 keybinding 명령과 usercontrolviewmodel의 commandbinding 명령을 연결하는 데 문제가 있습니다. . 누군가 나를 도와 줄 수 있습니까?
미리 감사드립니다.
감사합니다. Sheridan. 하지만이 솔루션을 구현할 때 몇 가지 문제가 발생할 수 있습니다. childViewModel에는 복사 할 특정 명령이 없습니다. Commandbindings라는 종속성 속성을 사용합니다 (위의 usercontrol xaml 및 AttachedProperties 클래스를 살펴보십시오). parenViewModel에서 childViewModel의 Commandbindings에 액세스 할 수 있습니다. 어쨌든 명령을 실행하기 위해 사용할 수 있습니까? 또한 Executed 이벤트 핸들러의 보낸 사람 객체는 listview 여야합니다 (복사 버튼의 commandtarget은 listview 임). – rajat