창을 알리는 명령을 시작할 수 있습니까? 또한 , 나는 당신의보기에 뒤에 코드를 방지하기 위해 (의미에서 Caliburn, ONXY, MVVM 툴킷 등, 프레임 워크)wpf에서 창을로드 할 때 명령을 실행하는 방법
답변
어떤 MVVM 프레임 워크를 사용하지 않는 Interactivity 라이브러리 (Microsoft에서 무료로 다운로드 할 수있는 System.Windows.Interactivity dll - Expression Blend와 함께 제공됨)를 사용하십시오.
그런 다음 명령을 실행하는 동작을 만들 수 있습니다. 이렇게하면 트리거는 명령을 호출하는 동작을 호출합니다.
<ia:Interaction.Triggers>
<ia:EventTrigger EventName="Loaded">
<custombehaviors:CommandAction Command="{Binding ShowMessage}" Parameter="I am loaded"/>
</ia:EventTrigger>
</ia:Interaction.Triggers>
의 commandAction은 (또한 System.Windows.Interactivity 사용)처럼 보일 수 있습니다
public class CommandAction : TriggerAction<UIElement>
{
public static DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(CommandAction), null);
public ICommand Command
{
get
{
return (ICommand)GetValue(CommandProperty);
}
set
{
SetValue(CommandProperty, value);
}
}
public static DependencyProperty ParameterProperty = DependencyProperty.Register("Parameter", typeof(object), typeof(CommandAction), null);
public object Parameter
{
get
{
return GetValue(ParameterProperty);
}
set
{
SetValue(ParameterProperty, value);
}
}
protected override void Invoke(object parameter)
{
Command.Execute(Parameter);
}
}
이 코드가 Silverlight 용임을 깨달았습니다. WPF에서 동일한 트리거/비헤이비어를 찾을 수 있다면 같은 원리가 작동해야한다고 생각합니다. – programatique
CommandAction 대신 [InvokeCommandAction] (http://msdn.microsoft.com/en-us/library/system.windows.interactivity.invokecommandaction (Expression.40) .aspx 지금이 기존 작업이있는 것 같습니다.) – Patrick
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ApplicationCommands.New.Execute(null, targetElement);
// or this.CommandBindings[0].Command.Execute(null);
}
및 XAML
Loaded="Window_Loaded"
MVVM을 사용하고 있습니다. 언제, 창이로드됩니다. 그것은 내 ViewModel 클래스에서들을 수 있도록 명령을 실행해야합니다. –
MVVM은 종교가 아닙니다. CodeBehind에 코드 줄을 추가하면 세계는 계속 회전합니다. –
정말이야! 그것이 계속 회전 할 것이라 확신합니까? :) – GONeale
행동을 사용하는보다 일반적인 방법은 AttachedCommandBehavior V2 aka ACB에서 제안하고 심지어 여러 이벤트에-명령 바인딩을 지원,
<Window x:Class="Example.YourWindow"
xmlns:local="clr-namespace:AttachedCommandBehavior;assembly=AttachedCommandBehavior"
local:CommandBehavior.Event="Loaded"
local:CommandBehavior.Command="{Binding DoSomethingWhenWindowIsLoaded}"
local:CommandBehavior.CommandParameter="Some information"
/>
거의 모든 이벤트가 발생하지 수 : 여기
사용의 매우 기본적인 예이다 ViewModel의 명령. 사실을 받아들이고 CodeBehind에 1 줄의 코드를 작성하거나 여러 복잡한 코드 줄이 동일하게 수행하는 모호한 패턴을 구현할 수 있습니다. #dontbeapurist –@EduardoMolteni에 동의하지 않습니다. 이벤트가 데이터 작업과 관련된 경우에는 코드 숨김에서 VM을 사용해야합니다. 이는 WPF의 비헤이비어를 사용하면 쉽게 피할 수 있습니다. – JoanComasFdz