MVVM 명령을 ContextMenu에 바인딩하는 방법

Quik 바이트

relativeSource와 ancestorLevel을 사용하여 완전히 혼란 스럽습니다. 상대 소스는 다른 요소에서 소스를 가져 오는 데 사용됩니다. 그러나이를 성공적으로 수행하려면 해당 요소가 어느 수준인지 세어야합니다. (디버그하는 방법?) WPF에서 가장 혼란스러운 부분입니다.

내 예에서는 데이터 소스를 바인딩 한 다음 명령을 원하는 컨텍스트 메뉴가 있습니다. 내 VM에서 명령을 얻으려면 바인딩이 어떻게되어야합니까? 감사합니다

 <Page.DataContext>
    <PDB:UsersViewModel x:Name="vm"/>
</Page.DataContext>


<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <!--Page Header info content-->
    <Grid Grid.Row="0">
        <TextBlock Text="{Binding SelectedUser.Name}"/>
        <TextBlock Text="{Binding ElementName=myGrd, Path=CurrentColumn.DisplayIndex}"/>
    </Grid>
    <!--Datagrid content-->
    <DataGrid x:Name="myGrd" 
              SelectionMode="Single"    
              SelectionUnit="Cell"
              CurrentItem="{Binding SelectedUser, Mode=TwoWay}"
              CurrentColumn="{Binding CurrentColumn, Mode=TwoWay}"
              IsReadOnly="True"
              Grid.Row="1" 
              ItemsSource="{Binding FilteredUserList}" 
              AutoGenerateColumns="True"             
              CanUserAddRows="False"
              >
        <DataGrid.Resources>
            <ContextMenu x:Key="ContextMenu">
                <ContextMenu.Items>
                    <MenuItem Header="{Binding 
                        RelativeSource={RelativeSource  
                        FindAncestor,
                        AncestorType={x:Type Page}, 
                        AncestorLevel=4}, Path=vm}" />
                </ContextMenu.Items>
            </ContextMenu>
        </DataGrid.Resources>

        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/>
            </Style>
        </DataGrid.CellStyle>
    </DataGrid>
</Grid>

아담 슈 타파

메뉴가 시각적 트리의 일부가 아니기 때문에 ContextMenu에서 RelativeSource를 사용할 수 없습니다. 그러나 이것은 Binding Source 및 x : Reference를 사용하여 피할 수 있습니다.

나는 당신의 ViewModel이 이렇게 보인다고 가정합니다

public class UserViewModel
{
    public string Header { get; set; }
    public ICommand MyCommand { get; }
    ... more code
}

이제 VM의 Header 및 MyCommand 속성을 바인딩하겠습니다.

<ContextMenu x:Key="ContextMenu">
    <ContextMenu.Items>
        <MenuItem Header="{Binding Header, Source={x:Reference vm}}"
                  Command="{Binding MyCommand, Source={x:Reference vm}}"/>
    </ContextMenu.Items>
</ContextMenu>

중요한 부분은 ViewModel을 시각적 트리의 어딘가에두고 예제에서했던 것처럼 x : Name을 설정하는 것입니다.

<Page.DataContext>
    <PDB:UsersViewModel x:Name="vm"/>
</Page.DataContext>

RelativeSource에 대해 더 알고 싶다면이 질문에 당신과 같은 문제가있는 것 같습니다. 기본적으로 바인딩의 경로는 DataContext.MyViewModelProperty이어야하고 바인딩의 RelativeSource는 DataContext가 ViewModel로 설정된 요소 여야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MVVM 바인딩에서 명령을 호출하는 방법

분류에서Dev

WPF 및 MVVM을 사용하여 명령을 Window Loaded 이벤트에 바인딩하는 방법

분류에서Dev

UserControl에서 MainView UWP MVVM으로 명령 및 contexrt를 바인딩하는 방법

분류에서Dev

zathura에서 명령을 # 기호에 바인딩하는 방법

분류에서Dev

Mvvm Light에서 TextBox의 값을 뷰 모델에 바인딩하는 방법

분류에서Dev

Kotlin MVVM 데이터 바인딩에서 Json을 파싱하는 방법

분류에서Dev

MVVM-ListBox WPF에 ObservableCollection 문자열을 바인딩하는 방법

분류에서Dev

목록 상자 (mvvm)에서 색상 컬렉션을 바인딩하는 방법

분류에서Dev

ContextMenu에서 MVVM의 WPF DataGridColumn에 바인딩하는 방법은 무엇입니까?

분류에서Dev

View 컨트롤을 ViewModel 목록 (WPF MVVM)에 올바르게 바인딩하는 방법

분류에서Dev

mvvm 모델을 사용하는 동안 zk에서 문자열의 일부를 바인딩하는 방법

분류에서Dev

C # 생성 단추를 XAML MVVM에 바인딩하는 방법

분류에서Dev

WPF MVVM에서 데이터 바인딩하는 방법

분류에서Dev

WPF (MVVM)에서 DataGrid 열 너비를 바인딩하는 방법

분류에서Dev

WPF MVVM 패턴을 사용하여 값을 TextBox correclty에 바인딩하는 방법

분류에서Dev

MVVM을 사용하여 DataTemplate의 컨트롤에 명령 바인딩

분류에서Dev

PrimeNg 메뉴 명령에 ID를 바인딩하는 방법

분류에서Dev

MVVM에서 동적으로 부풀린 레이아웃을 데이터 바인딩하는 방법

분류에서Dev

WPF MVVM의 컨트롤에 두 컬렉션을 바인딩하는 적절한 방법

분류에서Dev

WPF MVVM의 컨트롤에 두 컬렉션을 바인딩하는 적절한 방법

분류에서Dev

Xceed DataGrid를 row : MultiSelect로 설정-선택한 행을 MVVM 행 데이터에 바인딩하는 방법

분류에서Dev

ContextMenu에 대한 WPF 바인딩 명령

분류에서Dev

중첩 된 DataGrid에서 ContextMenu 항목을 바인딩하는 방법은 무엇입니까?

분류에서Dev

emacs OS X에서 실행 확장 명령에 두 번째 키 바인딩을 추가하는 방법

분류에서Dev

Emacs에서 일련의 명령에 대해 단일 키 바인딩을 설정하는 방법

분류에서Dev

tmux 명령을 M- <x>가 아닌 Alt- <x>에 바인딩하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 명령을 키보드 단축키에 바인딩하는 방법은 무엇입니까?

분류에서Dev

키보드 입력 명령을 기본 창에 바인딩하는 방법은 무엇입니까?

분류에서Dev

ListViewItem ContextMenu MenuItem 명령을 ListView의 ItemsSource의 ViewModel에 바인딩

Related 관련 기사

  1. 1

    MVVM 바인딩에서 명령을 호출하는 방법

  2. 2

    WPF 및 MVVM을 사용하여 명령을 Window Loaded 이벤트에 바인딩하는 방법

  3. 3

    UserControl에서 MainView UWP MVVM으로 명령 및 contexrt를 바인딩하는 방법

  4. 4

    zathura에서 명령을 # 기호에 바인딩하는 방법

  5. 5

    Mvvm Light에서 TextBox의 값을 뷰 모델에 바인딩하는 방법

  6. 6

    Kotlin MVVM 데이터 바인딩에서 Json을 파싱하는 방법

  7. 7

    MVVM-ListBox WPF에 ObservableCollection 문자열을 바인딩하는 방법

  8. 8

    목록 상자 (mvvm)에서 색상 컬렉션을 바인딩하는 방법

  9. 9

    ContextMenu에서 MVVM의 WPF DataGridColumn에 바인딩하는 방법은 무엇입니까?

  10. 10

    View 컨트롤을 ViewModel 목록 (WPF MVVM)에 올바르게 바인딩하는 방법

  11. 11

    mvvm 모델을 사용하는 동안 zk에서 문자열의 일부를 바인딩하는 방법

  12. 12

    C # 생성 단추를 XAML MVVM에 바인딩하는 방법

  13. 13

    WPF MVVM에서 데이터 바인딩하는 방법

  14. 14

    WPF (MVVM)에서 DataGrid 열 너비를 바인딩하는 방법

  15. 15

    WPF MVVM 패턴을 사용하여 값을 TextBox correclty에 바인딩하는 방법

  16. 16

    MVVM을 사용하여 DataTemplate의 컨트롤에 명령 바인딩

  17. 17

    PrimeNg 메뉴 명령에 ID를 바인딩하는 방법

  18. 18

    MVVM에서 동적으로 부풀린 레이아웃을 데이터 바인딩하는 방법

  19. 19

    WPF MVVM의 컨트롤에 두 컬렉션을 바인딩하는 적절한 방법

  20. 20

    WPF MVVM의 컨트롤에 두 컬렉션을 바인딩하는 적절한 방법

  21. 21

    Xceed DataGrid를 row : MultiSelect로 설정-선택한 행을 MVVM 행 데이터에 바인딩하는 방법

  22. 22

    ContextMenu에 대한 WPF 바인딩 명령

  23. 23

    중첩 된 DataGrid에서 ContextMenu 항목을 바인딩하는 방법은 무엇입니까?

  24. 24

    emacs OS X에서 실행 확장 명령에 두 번째 키 바인딩을 추가하는 방법

  25. 25

    Emacs에서 일련의 명령에 대해 단일 키 바인딩을 설정하는 방법

  26. 26

    tmux 명령을 M- <x>가 아닌 Alt- <x>에 바인딩하는 방법은 무엇입니까?

  27. 27

    사용자 지정 명령을 키보드 단축키에 바인딩하는 방법은 무엇입니까?

  28. 28

    키보드 입력 명령을 기본 창에 바인딩하는 방법은 무엇입니까?

  29. 29

    ListViewItem ContextMenu MenuItem 명령을 ListView의 ItemsSource의 ViewModel에 바인딩

뜨겁다태그

보관