2017-12-21 66 views
0

참고 : 이것은 Xamarin 양식 용입니다. 중복 것으로 여겨지는 질문은 C# ListView를 실제로 처리하는 것입니다.Xamarin 양식 목록보기 : 목록 항목에 명령 추가

목록보기 (Mac Xamarin Forms 용 Visual Studio 2017을 사용하는 크로스 플랫폼) 데이터 바인딩에 대한 대략적인 이해가 있으므로 형식이 있습니다. 웹 서비스에서 데이터를로드하는 방법. 이제 표시된 각 행에 대해 몇 가지 작업을 수행하여 각 항목에 대한 ListView에 단추를 포함합니다. 내가 선택한 행에 대한 일부 기능을 수행 할 수 있도록 작업을 추가하는 방법을 얻을 수 없습니다. 나의 이해에서

void handle_prayupbutton_action() 
{ 

} 

public Command _handle_prayupbutton_action 
{  
     get { return new Command(() => handle_prayupbutton_action()); 
} 

다음을 트리거 당신이 Command를 만들 : 나는 다음과 같은 방법을 뒤에 코드에서

<Button x:Name="prayUpButton" Command="{Binding _handle_prayupbutton_action}" Text="PU" Grid.Row="4" Grid.Column="0" /> 

: ListView에에서

나는 이런 식으로 버튼을 생성 동작. 내가 여기서 무엇을 놓치고 있니? void handle_prayupbutton_action()에 중단 점을 넣으면 절대로 안타깝습니다.

Xamarin Forms 크로스 플랫폼 목록보기에 작업을 추가하는 가장 좋은 방법/올바른 방법은 무엇입니까?

UPDATE 1 :이에 아래의 코드를 변경 : 나는 또한 만든

<Button x:Name="prayUpButton" Command="{Binding Source={x:Static local.PrayersPagePage._handle_prayupbutton_action}}" Text="Pray Up" Grid.Row="4" Grid.Column="0" /> 

:

<?xml version="1.0" encoding="UTF-8"?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
x:Class="prayupapp.Pages.PrayersPage" x:Name="PrayersPagePage"> 

그래서 내가 버튼 명령을 변경 : 이것은 내 헤더

입니다 줄리 판 (Julipan)과 같은 명령 루틴은 정적 (Static)이라고 제안했다. 이전에는 목록보기가 이전 페이지에서 로딩을 중단했기 때문에 실제로 회귀했습니다. 단추 코드 명령을 원래 코드 (분명히 잘못됨)로 반환하면 작동한다는 것을 알았습니다. 제가 바인딩을하는 방식에 문제가 있습니다. 당신이해야 할 모든 코드가 뒤에 버튼의 명령 속성 명령의 바인드하는 경우

+0

[ListView에서 레코드를 선택하고 코드 숨김 메소드에서이를 참조하려면 어떻게합니까?] (https://stackoverflow.com/questions/47823693/how-can-i-select-a-record) -in-a-listview-and-the-code-behind-meth) –

+1

코드 숨김이라고하면 Xaml.cs 파일을 참조하는 것입니까? 바인딩을 사용하려면 뷰의 BindingContext를 다른 클래스 (ViewModel)로 설정하고 거기에 명령을 배치해야합니다. https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/ 대부분을 다룹니다 –

+1

바인딩 컨텍스트를 ListView 또는 Page에 설정 했습니까? Item의 BindingContext는 항목 자체입니다. 따라서 항목 셀 내에서 바인딩을 사용하면 항목 수준에서 바인딩 속성에 액세스 할 수 있어야합니다. 이해하니? –

답변

0

는 당신은 "뒤에 코드"를 정적으로 명령을 정의해야

static void handle_prayupbutton_action() 
{ 

} 

public static Command _handle_prayupbutton_action 
{ 
    get 
    { 
     return new Command(() => handle_prayupbutton_action()); 
    } 
} 

을 그리고 당신의 XAML에서 당신 바인딩 할 소스를 추가해야합니다.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:AppX" 
     x:Class="AppX.MainPage"> 

    <StackLayout> 
     <ListView ItemsSource="{Binding Source={x:Static local:MainPage.Items}, 
             Path=.}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <ViewCell> 
         <StackLayout> 
          <Button Text="{Binding .}" 
            Command="{Binding Source={x:Static local:MainPage._handle_prayupbutton_action}}"/> 
         </StackLayout> 
        </ViewCell> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </StackLayout> 
</ContentPage> 

이것은 내 측면에서 완벽하게 작동합니다. 나는 당신이 찾고있는 지식을 얻길 바랍니다.

+0

새 코드로 질문을 업데이트했습니다. 아직 작동하지 않습니다. ( – logixologist

+1

조심해! "Source"를 "local"로 설정했는데 내 예제에서와 같이이 변수가 XAML에 정의되어 있지 않습니다.이 변수는 명령이있는 네임 스페이스를 참조합니다. "코드 숨김"에서 이벤트를 처리하는 경우 대신 "클릭 함"을 사용하십시오 MVVM 아키텍처를 사용할 때 명령이 적합합니다 "클릭"으로 이동하려면 명령을 잊어 버리고 바인딩이 필요하지 않습니다 뒤에있는 코드에서 핸들러를 참조하기 때문입니다.

+0

방금 ​​문제를 해결했다고 생각합니다 ... 마침내 클릭 한 이벤트를 던질 수 있습니다. 왜 과거에 제대로 작동하지 않는지 확신 할 수 없습니다. 몇 가지 사항을 테스트해야합니다. 답을 받아야한다고 생각합니다. ! – logixologist