[英]WP8 - Binding commands to buttons and switches in list
我正在使用MVVM模式,並且我的頁面中有LongListSelector,但是我不確定如何執行以下綁定:
我希望每一行都有一個按鈕,該按鈕可以對該行中的對象進行處理。 我在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); }
我試圖像這樣綁定它:
<Button x:Name="ShowButton" Content="Show" Command="{Binding GoToTrackingPageCommand}" CommandParameter="{Binding}"/>
它不起作用,因為按鈕在數據模板中,並且在綁定時,它轉到選定的Module對象,而不是ViewModel。 所以我的第一個問題是如何解決?
第二個我不太復雜,但希望兩者都能輕松解決。 我也希望每一行中都有ToggleSwitch,並且當值更改時,我想調用http請求。 我在datatemplate中有這個:
<toolkit:ToggleSwitch x:Name="LockSwitch" IsChecked="{Binding IsLock}" />
我可以更改對TwoWay的綁定,但是我更改對象中的值,並且想在ViewModel中使用Module參數調用方法。 那么我可以更改此綁定嗎? 我是否應該從對象中調用ViewModel中的方法? 還是應該以某種方式告訴ViewModel該對象已更改此值? 還是應該綁定Checked和Unchecked事件?
關於按鈕:可以使用elementName綁定訪問“父datacontext”並設置命令參數:
<Button Command="{Binding DataContext.GoToXyCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" />
關於第二個問題:
首先,我將檢查切換按鈕是否是正確的解決方案,如果更改值會觸發可能持續較長時間的過程。
WP執行此操作的一個示例是啟用/禁用Air-Plane模式。
我將以相同的方式進行操作:
編輯:這是我最近使用的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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.