@ stuart의 blog post에 기반하여 리터럴 문자열을 CommandParameter로 바인딩하는 방법을 볼 수 있습니다.Command 객체 내에서 ViewModel 전체에 액세스하는 방법
local:MvxBind="Click FindUserCommand, CommandParameter=foo"
public class FindUserViewModel: ViewModelBase
{
public FindUserViewModel(IFindUserCommand findUserCommand)
{
_findUserCommand = findUserCommand;
}
// class truncated for brevity
private IFindUserCommand _findUserCommand;
public IFindUserCommand FindUserCommand
{
get { return _findUserCommand; }
set { _findUserCommand = value; RaisePropertyChanged(() = > FindUserCommand); }
}
}
public class FindUserCommand: IFindUserCommand
{
// class truncated for brevity
public void Execute(object parameter)
{
// RIGHT HERE:
// value of parameter == foo
}
}
어떻게 명령은 뷰 모델을 그 자체가 명령 개체에 살고 NOT 때이 버튼의 CommandParameter으로 전체 뷰 모델을 결합 하는가?
public void Execute(object parameter)
{
var vm = (FindUserViewModel)parameter;
var firstName = vm.FirstName;
var lastName = vm.LastName;
// etc...
}
참고 : 나는 WPF와 유사한 균일 한 방식으로이 기능을 어떻게 든 MvvmCross을 확장해야하는 경우, 내가 그와 함께 확인 해요 .. 어디서부터 시작 난 그냥 모르겠어요. 이 같은보기에있는 버튼을 바인딩 할
MvvmCross 예
private Cirrious.MvvmCross.ViewModels.MvxCommand _insertCommand;
public System.Windows.Input.ICommand InsertCommand
{
get
{
_insertCommand = _insertCommand ? ? new Cirrious.MvvmCross.ViewModels.MvxCommand(DoInsert);
return _insertCommand;
}
}
private int _countAdded = 0;
private void DoInsert()
{
_countAdded++;
var kitten = _kittenGenesisService.CreateNewKitten(_countAdded.ToString());
_dataService.Insert(kitten);
RefreshDataCount();
}
그리고 :
모든 예제는이 같은 뷰 모델에 직접 명령을 선언 찾을 수 있습니다 :
<Button
android:text="Insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button1"
local:MvxBind="Click InsertCommand" />
하지만 더 많은 테스트 할 수 있도록 자체 클래스 파일에서 Command 개체를 선언하고 ViewModel에 주입해야합니다.
WPF에서 명령 매개 변수 바인딩을 수행하는 것과 비슷한 Android 용 MVVMCross에서 CommandParameter 바인딩을 사용할 수 있습니까?
WPF 예 :
보기 버튼 정의 :
<Button
Command="{Binding SearchCommand}"
CommandParameter="{Binding}"/>
뷰 모델 명령 속성 :
private ICommand _findUserCommand;
public ICommand FindUserCommand
{
get { return _findUserCommand; }
set { _findUserCommand = value; RaisePropertyChanged(() => FindUserCommand); }
}
명령 개체 정의 :
,public class FindUserCommand : ICommand
{
private readonly IUserService _userService;
public FindUserCommand(IUserService userService)
{
_userService = userService;
}
public bool CanExecute (object parameter)
{
var findUserViewModel = (FindUserViewModel)parameter;
return findUserViewModel.NameSearch.Length > 0;
}
public void Execute (object parameter)
{
FindUserViewModel.Users = _userService.Find(FindUserViewModel.NameSearch);
}
public event EventHandler CanExecuteChanged;
public void RaiseCanExecuteChanged()
{
if (CanExecuteChanged != null)
CanExecuteChanged(this, new EventArgs());
}
}
을 참조하십시오. FindUserCommand, CommandParameter = ViewModel을 클릭하십시오.'Execute (parameter) '매개 변수 값 =="ViewModel "을 볼 수 있습니다. 어떻게하면 전체 ViewModel 객체가 될 수 있습니까? –
나는이 사용자 정의 버튼 비트를 조사 해왔다. 질문을 업데이트하고 현상금을 추가했습니다. 만약 당신이 관심이 있으시다면 ... –
이 라인은 저에게'Command SearchCommand; CommandParameter .'를 해주었습니다. 후속 조치로서, 명령의 "CanExecute"상태를 기반으로 버튼을 활성화/비활성화 할 수 있습니까? –