2014-10-23 3 views
0

메뉴에 대한 사용자 지정 컨트롤을 만들고 현재 ListBox가 있습니다. 다음과 같은 것 :Windows Phone - 사용자 정의 컨트롤을 ViewModel에 전파하는 방법

Tap 이벤트를 잡으려면 클래스에서 속성을 가져와 MVVM 모델을 유지해야합니다. MainPage.xaml.cs 또는 MainViewModel에서 어떻게 찾을 수 있습니까?

<controls:BottomMenu x:Name="BottomMenu" Canvas.Top="{Binding MenuCanvasTop}" 
          Width="480" Height="400"> 
</controls:BottomMenu> 

내가 내 MainViewModel이 코드를 준비해야 :

public RelayCommand<string> GoToSectionCommand 
     { 
      get 
      { 
       return goToArticleCommand 
        ?? (goToArticleCommand = new RelayCommand<string>(
         NavigateToSection)); 
      } 
     } 

을하지만 그것을 호출 할 수있는 방법을 모르겠어요

나는 내에서 MainPage.xaml에서이 코드가 있습니다. 가장 좋은 방법은 뭔가요?

편집 : 목록 상자 확장을 시도 :와

<ListBox x:Name="MenuItemsList" 
            Grid.Row="1" 
            ItemsSource="{Binding ProgramList, Mode=OneWay}"> 
           <ListBox.ItemTemplate> 
            <DataTemplate> 
             <StackPanel Margin="10"> 
              <Button Content="{Binding Title}" 
                Command="{Binding ListButtonClickCommand, Source={RelativeSource Self}}" 
                CommandParameter="{Binding Url}"/> 
             </StackPanel> 
            </DataTemplate> 
           </ListBox.ItemTemplate> 
          </ListBox> 

을 코드 숨김에서 MainPage.xaml에 다음

public ICommand ListButtonClickCommand 
    { 
     get { return (ICommand)GetValue(ListButtonClickCommandProperty); } 
     set { SetValue(ListButtonClickCommandProperty, value); } 
    } 

    public static readonly DependencyProperty ListButtonClickCommandProperty = 
      DependencyProperty.Register("ListButtonClickCommand", typeof(ICommand), typeof(BottomMenu), new PropertyMetadata(null)); 

    public BottomMenu() 
    { 
     InitializeComponent(); 
    } 

:

<controls:BottomMenu x:Name="BottomMenu" Canvas.Top="{Binding MenuCanvasTop}" 
         Width="480" Height="400" 
         ListButtonClickCommand="{Binding MenuItemButtonCommand}"> 

    </controls:BottomMenu> 

그리고 MainViewModel에서 :

private ICommand menuItemButtonCommand; 
    public ICommand MenuItemButtonCommand 
    { 

     get 
     { 
      return menuItemButtonCommand 
       ?? (menuItemButtonCommand = new RelayCommand(
        NavigateToArticleSection)); 
     } 

    } 

지금은 운이 없군요. 작동하지 않습니다. RelayCommand가 트리거되지 않습니다.

편집 2 문제는 사용자 지정 컨트롤에 바인딩 명령이있는 것 같지만 수정 방법을 모르겠습니다.

답변

1

그냥 UserControl에 바인딩해야합니다. "RelativeSource Self"를 사용하면 Button에 바인딩됩니다. 원하는 것은 아닙니다. "ElementName"바인딩을 사용하여 사용자 정의 컨트롤을 찾을 수 있어야합니다.

<UserControl x:Name="UserControlName" ... > 

    ... 

     <Button Content="{Binding Title}" 
       Command="{Binding ElementName=UserControlName,Path=ListButtonClickCommand}" 
       CommandParameter="{Binding Url}"/> 

    ... 

</UserControl> 
+0

감사합니다. –