C# WP8-将命令绑定到列表中的按钮和开关
我使用的是MVVM模式,我的页面中有LongListSelector,但我不确定如何进行这些绑定:C# WP8-将命令绑定到列表中的按钮和开关,c#,windows-phone-8,mvvm,data-binding,windows-phone,C#,Windows Phone 8,Mvvm,Data Binding,Windows Phone,我使用的是MVVM模式,我的页面中有LongListSelector,但我不确定如何进行这些绑定: 我希望在每一行中都有一个按钮,用于处理该行中的对象。我在ViewModel中准备了以下内容: private RelayCommand<Module> goToTrackingPageCommand; public RelayCommand<Module> GoToTrackingPageCommand { get { return go
- 我希望在每一行中都有一个按钮,用于处理该行中的对象。我在ViewModel中准备了以下内容:
private RelayCommand<Module> goToTrackingPageCommand; public RelayCommand<Module> GoToTrackingPageCommand { get { return goToTrackingPageCommand ?? (goToTrackingPageCommand = new RelayCommand<Module>( NavigateToTrackingPage)); } } private void NavigateToTrackingPage(Module module) { App.Current.SelectedModule = module; navigationService.NavigateTo(new Uri("/Views/ModuleTrackingPage.xaml"), UriKind.Relative); }
我试着把它绑成这样:private RelayCommand goToTrackingPageCommand; public relay命令GoToTrackingPageCommand { 得到 { 返回goToTrackingPageCommand ??(goToTrackingPageCommand=新继电器命令( 导航跟踪页面); } } 专用void NavigateToTrackingPage(模块) { App.Current.SelectedModule=模块; navigationService.NavigateTo(新Uri(“/Views/ModuleTrackingPage.xaml”)、UriKind.Relative; }
<Button x:Name="ShowButton" Content="Show" Command="{Binding GoToTrackingPageCommand}" CommandParameter="{Binding}"/>
它不起作用,因为按钮在datatemplate中,当有绑定时,它会转到选定的模块对象,但不会转到ViewModel。所以我的第一个问题是我如何修复它 - 第二个有点复杂,我想,但希望两者都能得到简单的解决方案。我希望在每一行中也有ToggleSwitch,当值更改时,我希望调用http请求。我在datatemplate中有以下内容:
<toolkit:ToggleSwitch x:Name="LockSwitch" IsChecked="{Binding IsLock}" />
我可以将绑定更改为双向,但我更改了对象中的值,并希望使用模块参数调用ViewModel中的方法。那么我可以更改这个绑定吗?我是否应该从对象调用ViewModel中的方法?或者我应该告诉ViewModel此对象已更改此值吗?还是应该绑定已检查和未检查的事件
<Button Command="{Binding DataContext.GoToXyCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" />
我不知道如何访问家长。看起来是对的。对于第二个问题:如何从setter开始更新流程?如何在ViewModel中调用方法?多亏了IoC,我在ViewModel中拥有了ApiService类(用于管理api调用)以及如何访问它?我(个人意见)只会从属性设置器中触发一些“OnXyChanged”方法。看起来不错,但还有一件事。当我在VM中找到某个方法(使用父datacontext)时,如何从列表中设置该对象?在按钮中,使用命令参数很容易,但如何使用ToggleSwitch实现这一点?您不需要这样做。使用按钮时,只需将Datacontext作为CommandParameter提供,因为按钮位于列表控件(列表将每个项的Datacontext设置为列表源项)中。由于切换按钮绑定到特定属性,因此不需要提供更多上下文。
public bool IsUpdatingPushEnabled
{
get { return _isUpdatingPushEnabled; }
set { SetProperty(ref _isUpdatingPushEnabled, value); }
}
public bool IsPushEnabled
{
get { return _isPushEnabled; }
set
{
if (!IsUpdatingPushEnabled)
{
SetProperty(ref _isPushEnabled, value);
var t = SetPushAsync();
}
}
}
private async Task SetPushAsync()
{
IsUpdatingPushEnabled = true;
try
{
var result = await _settingService.EnablePushAsync(IsPushEnabled);
SetProperty(ref _isPushEnabled, result, "IsPushEnabled");
}
catch
{
//...
}
IsUpdatingPushEnabled = false;
}