我正在使用Xamarin使用MvvmCross在C#中开发Android应用程序。
当我使用一个绑定到搜索栏的View模型时,应用程序编译并运行正常,但不适用于我想用按钮绑定的View Models。我的所有View模型都有一个非常相似的结构(除名字外几乎相同)。
我的设置示例如下:
我的视图模型类似于:
public interface ISomething
{
int MethodSomething(int i);
}
public class ChangeSomethingViewModel : MvxViewModel
{
private readonly ISomething _somethign;
public ChangeSomethingViewModel(ISomething something)
{
_something = something;
}
public override void Start()
{
Terminate_Something = "hello";
base.Start();
}
.
.
.
public string terminate;
public string Terminate_Something
{
get { return terminate; }
set { terminate= "pressed"; RaisePropertyChanged(() => Terminate_Something); }
}
然后我有另一个使用MethodSomething(int i)的文件
public class ChangeSomething : ISystem
{
public int MethodSomething(int i)
{
.
.
.
}
}
在setup.cs中
protected override IMvxApplication CreateApp()
{
Mvx.RegisterSingleton<IMvxAppStart>(new MvxAppStart<ChangeSomethingViewModel>());
return new App();
}
protected override void InitializeFirstChance()
{
Mvx.RegisterSingleton<ISomething>(new ChangeSomething());
base.InitializeFirstChance();
}
在我的Main.axml文件中,我有一个按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
local:MvxBind="Click Terminate_Something" />
当我运行应用程序时,Terminate_Something已设置并显示在按钮中,正如我所料。但是,如果我在Terminate_Something中放置一个断点并单击该按钮,则不会调用Terminate_Something。
我应该提一下,每当我触摸按钮时,我都会在日志中看到以下内容。
04-17 12:57:14.070 D/GestureDetector( 5928): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 7 mFalseSizeCnt:0
我无法理解可能出现什么问题,因为我的其他视图模型可以很好地链接到滑块。当我按下滑块(搜索栏)移动并调用Set时,相应的日志为
04-17 12:57:45.060 D/ProgressBar( 5928): setProgress = 43, fromUser = true
04-17 12:57:45.060 D/ProgressBar( 5928): mProgress = 50mIndeterminate = false, mMin = 0, mMax = 70
提前谢谢
答案 0 :(得分:1)
看起来问题是因为您没有绑定到ICommand。 另外,我可能会在某个地方遗漏它,但你也应该在Terminate_Something MethodSomething中指定,不是吗?
这应该解决它:在View Model中将Terminate_Something属性更改为
private MvxCommand terminate;
public System.Windows.Input.ICommand Terminate_Something
{
get
{
terminate = terminate ?? new MvxCommand(MethodSomething);
return terminate;
}
}
既然你提到SeekBar正在运作你没有做过类似的事情吗?
set { terminate= "pressed"; RaisePropertyChanged(() => Terminate_Something); MethodSomething();}
无论如何,斯图尔特在N=5
中有关于这件事的视频修改强>
显然,你不能设置终止于&#34;你好&#34;在start()中...取决于你试图用按钮做什么,你可以绑定文本&#34;你好&#34;按钮到不同的属性。