我正在使用 MVVM 模式,并且我的页面中有 LongListSelector 但我不确定如何进行这些绑定(bind):
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);
}
我正在尝试像这样绑定(bind)它:
<Button x:Name="ShowButton" Content="Show"
Command="{Binding GoToTrackingPageCommand}"
CommandParameter="{Binding}"/>
它不起作用,因为按钮在数据模板中,并且当绑定(bind)时它转到选定的模块对象而不是 ViewModel。所以我的第一个问题是如何解决它?
<toolkit:ToggleSwitch x:Name="LockSwitch" IsChecked="{Binding IsLock}" />
我可以将绑定(bind)更改为 TwoWay,但我更改了对象中的值,并且我想使用 Module 参数调用 ViewModel 中的方法。那么我可以更改此绑定(bind)吗?我应该以某种方式从我的对象调用 ViewModel 中的方法吗?或者我应该以某种方式告诉 ViewModel 这个对象已经改变了这个值?或者我应该绑定(bind) Checked 和 Unchecked 事件?
最佳答案
关于按钮:
您可以使用 elementName 绑定(bind)访问“父数据上下文”并设置命令参数:
<Button Command="{Binding DataContext.GoToXyCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" />
关于你的第二个问题:
首先,我会检查切换按钮是否是正确的解决方案,如果更改值会触发持续时间可能更长的过程。
WP 执行此操作的一个示例是启用/禁用飞行模式。
我会这样做:
编辑:这是我最近使用的 ViewModel 的示例。
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;
}
关于c# - WP8 - 将命令绑定(bind)到列表中的按钮和开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27345882/