2016-06-07 45 views
-1

結合按鈕網格我很新的XAML努力使電網與開關按鈕 事情是這樣的:吳XAML應用程序從自定義集合

<GridView ItemSource="{Binding ButtonCollection}"> 
    <GridView.ItemTemplate> 
    <DataTemplate> 
    <ToggleButton Content="{Binding Label}" IsEnabled="{Binding BEnabled}" IsChecked="{Binding BChecked, Mode=TwoWay}"/> 
    <DataTemplate> 
</GridView.ItemTemplate> 
</GridView> 

ObservableCollection<ButtonClass> ButtonCollection 

也類按鈕

class ButtonClass 
{ 
public string Label {get; set;} 
public bool BEnabled {get; set:} 
public bool BChecked {get;set;} 
} 

當頁面加載按鈕從ObservableC顯示時,綁定工作ollection 但我想收藏的時候按鈕器isChecked值改變

也更新有什麼辦法綁定功能點擊的方法,如:

Click="{Binding DoWhenClicked}" 

現在它只是發生錯誤,我認爲這是因爲DoWhenClicked ISN在ItemSource中。

摘要: 我想要網格的切換按鈕綁定到某種列表/數組/數據集合與標籤,檢查狀態,啓用狀態。 當切換按鈕被選中時,我希望它反映在我的收藏中。 另外我想綁定事件Click方法,以便我可以執行操作,如禁用其他按鈕時檢查一些切換按鈕。 這樣做的好方法是什麼。

回答

1

我注意到,你問之前模板10幾個問題,所以我認爲你也在這裏使用Template 10來獲得MVVM模式。

當頁面加載按鈕從的ObservableCollection顯示,但是我想收集,更新按鈕時器isChecked值改變

在模板10項目,如果你想結合的作品得到通知時,參數在數據模型(這裏的意思是你的ButtonClass),你可以從BindableBase推導出你的課程。如果您檢查BindableBase課程,您會發現它已完成INotifyPropertyChanged的工作,因此直接從BindableBase直接派生而非自己執行INotifyPropertyChanged會容易得多。

也沒有什麼辦法來綁定功能,單擊方法

此外,我要綁定事件點擊方法,這樣我可以執行操作,如禁用一些切換按鈕,當其他按鈕被選中。

相反Click事件,我個人建議你在MVVM模式使用Command,你可能想知道的是單擊的按鈕,這樣你就可以在這裏使用CommandParameter。我創建了一個空白模板10項目,這裏是我的示例:

<GridView x:Name="gridView" RelativePanel.Below="pageHeader" Margin="16,12,0,0" ItemsSource="{x:Bind ViewModel.ButtonCollection}"> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
      <ToggleButton Width="100" Content="{Binding Label}" IsEnabled="{Binding BEnabled}" 
          IsChecked="{Binding BChecked, Mode=TwoWay}" Command="{Binding ToggleBtnClickCommand}" 
          CommandParameter="{Binding Label}" /> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

ButtonClass是這樣的:

public class ButtonClass : BindableBase 
{ 
    public string Label { get; set; } 
    public bool BEnabled { get; set; } 

    private bool _bChecked; 

    public bool BChecked 
    { 
     get { return _bChecked; } 
     set 
     { 
      _bChecked = value; 
      RaisePropertyChanged(); 
     } 
    } 

    public ICommand ToggleBtnClickCommand { get; set; } 
} 

而且MainPageViewModel

public class MainPageViewModel : ViewModelBase 
{ 
    public ObservableCollection<ButtonClass> ButtonCollection; 

    public MainPageViewModel() 
    { 
     ButtonCollection = new ObservableCollection<ButtonClass>(); 
     for (int i = 0; i < 20; i++) 
     { 
      ButtonCollection.Add(new ButtonClass 
      { 
       Label = "TButton " + i, 
       BChecked = true, 
       BEnabled = true, 
       ToggleBtnClickCommand = new DelegateCommand<string>(ToggleBtnClicked) 
      }); 
     } 
    } 

    public void ToggleBtnClicked(string obj) 
    { 
     var buttonLable = obj; 
    } 
} 

如果你需要檢查我的樣品,你可以找到我的演示here

+0

謝謝,忘記提及我使用模板10. – user5902075

+0

嘗試編譯時出現編譯錯誤「無效的事件簽名Click。事件只能綁定到符合事件簽名或無參數的方法」Works沒有CommndParameter綁定。 – user5902075

+0

@ user5902075,你在哪行中得到這個錯誤?看起來這是命令的問題,你是否使用我的代碼或嘗試在代碼中使用命令? –

0

但是也有一些從你的代碼所缺少幾個概念,你需要正確地實現這個工作

  1. INotifyPropertyChanged的 - >您ButtonClass類作爲您的視圖視圖模型。因此,對於價值在你身邊需要你的類來實現它,所有的屬性提高PropertyChanged事件時,他們的價值觀發生變化(在二傳手)

  2. 2路綁定正確更新用戶界面和其他方式 - >如果你希望你的ButtonClass實例在你點擊按鈕時更新,並且你希望你的按鈕改變狀態,如果你改變ButtonClass的屬性,你的綁定需要Mode = TwoWay。你可能想探索新的綁定{x:Bind}有更好的表現

  3. 命令 - >要綁定click事件,您需要使用命令屬性。您需要創建一個ICommand實現,並在ButtonClass中創建一個屬性。 Button的使用Command屬性綁定到該Command。

基本上,我提到的所有東西都是MVVM框架的組件,其中有許多框架。這裏有一些比較流行的:CaliburnMVVMCross,Prism

還有用於Windows 10一個偉大的入門工具包,肯定會啓動您的應用程序,並含有大量的這個班已建成的 - Template10