2013-03-07 8 views
0

WinRT 앱에서 작업 중이며 버튼에 명령을 사용하려고합니다.ICommand with navigation

public class addCommand : ICommand 
{ 
    private async Task AddNewVehicle() 
    { 
     vvm VM = new vvm(); 
     await VM.AddNewVehicleInfo(); 
    } 

public bool CanExecute(object parameter) 
{ 
    return true; 
} 

public event EventHandler CanExecuteChanged; 

public void Execute(object parameter) 
{ 
    AddNewVehicle(); 

} 

}는 AddNewVehicle() 메소드 후

가 호출 내 세부 정보 페이지로 이동하려는 완료됩니다. 내 명령에 나는 그것이 Frame가 무엇인지하지 않는 오류를 받고 있어요 것을 추가 할 때, 그러나

this.Frame.Navigate(typeof(VehicleItemDetailPage), 0); 

: 클릭 이벤트에서 나는 이런 일이 있었다.

명령을 실행 한 후 세부 정보 페이지로 이동하려면 어떻게해야합니까?

업데이트 XAML 코드 :

<Button x:Name="addButton" Style="{StaticResource AddAppBarButtonStyle}" Command="{Binding AddCommand}" CommandParameter="{Binding ElementName=Frame}"/> 

답변

1

당신은 Execute 매개 변수로 프레임 필드를 전달할 수 있습니다. 예 :

<Button Command="{Binding CommandName,CommandParameter={Binding ElementName=Frame}}"/> 

그 후 당신은 Frameparameter 캐스팅하고 원하는대로 사용하십시오.

+0

for winRT 약간 다른 구문이있는 것 같습니다. 다음과 같이 CommandParameter를 추가했습니다. Command = "{AddCommand}를 바인딩"CommandParameter = "{Binding ElementName = Frame}"그러나 명령 코드를 밟았을 때 매개 변수는 여전히 null입니다. – webdad3

+2

@JeffV : ElementName은 x : Name 특성 값을 필요로합니다. 따라서 "이름". 비주얼 트리의 일부 UIElement에는 Frame 속성이 있습니다. 이름을 지정한 다음 바인딩에서 참조하십시오. – Will

+0

@Will 버튼 요소에 x : Name = "addButton"을 추가했는데 같은 결과가 나타납니다. 그게 네가 언급 한 것인가? – webdad3

3

난 그냥 부를 것이다

((프레임) Window.Current.Content) .Navigate (대해서 typeof (VehicleItemDetailPage), 0);

대신 this.Frame과 필요하지 않은 XAML의 매개 변수를 전달하는 것. 프레임이 정적이기 때문입니다. 따라서 현재 시작된 코드보기의 인스턴스가 필요하지 않습니다.