2013-06-06 76 views
0

我在此綁定中缺少某些內容,因爲它不起作用。這是爲了學習的目的,如果你看到這可以改善,請告訴我。但除此之外,我也很想知道爲什麼這不起作用。UserControl和MainWindow問題之間的綁定

在我的MainWindow中有一個CheckBox,它綁定了一個命令:checkCommand

RootViewModel.cs

public Command checkCommand { get; set; } 


public RootViewModel() 
     { 
checkCommand = new Command(mark); 
     } 

private void mark() 
     {   
      myThingsCollection[0].marked= true;    
     } 

此命令工作正常,並且也改變了markedtrue狀態(我有MessageShowBox測試這一點)。

我以前增加了UC的ObsevableCollection<UC>myThingsCollection),並將其綁定到ItemsControl這種方式MainWindow.cs

<ItemsControl ItemsSource="{Binding myThingsCollection}"> 
         <DataTemplate> <!--I've ommited some parts here--!> 
          <local:UC/> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 

的UC正確顯示。

markedUCViewModel的屬性:

class UCViewModel 
    { 
     #region Implementation of INotifyPropertyChanged 


     private bool _marked; 
     public bool marked 
     { 
      get 
      { 
       return _marked; 
      } 
      set 
      { 
       _marked= value; 
       OnPropertyChanged("marked"); 

      } 
     } 
    } 

UserControlUC)具有CheckBox我這樣綁定:

<CheckBox Content="Hello!" IsChecked="{Binding marked}"/> 

,並設置DataContext這種方式(代碼在UC.cs.xaml

 public UC() 
    { 
     UCViewModel context = new UCViewModel(); 
     DataContext = context; 

     InitializeComponent(); 

    } 

但它不起作用。我不知道它缺少什麼。順便說一句,我很確定這不是一個好的方法來解決這個問題,有沒有更簡單的方法?由於

+0

-.- * [...]但它不起作用。 [...] * - 非常有用,就像「我的應用程序正在崩潰」。來吧,你必須提供更多的細節。你在VS的調試輸出窗口中是否收到了任何'BindingExpression'錯誤?順便說一句,'Command'是這個自定義類嗎? – DHN

+0

是的,命令是啓用命令的自定義類。我無法看到BindingExpression錯誤。我會再檢查一次。 – Sturm

+0

我在設置,輸出窗口中將DataBinding Trace設置爲「全部」。但我無法找到顯示錯誤的位置。它們是否顯示在正常錯誤的相同位置?如果是這樣,沒有任何錯誤。 – Sturm

回答

0

下載鏈接:Here

^^鏈接應該有一個與你正在做的工作的罰款一切項目。

如果您尋找建議從您的代碼,以改善一些指針:

  • 名稱與特定的風格指南的變量。屬性以「大寫」開頭。 StyleCop可以幫助識別問題。是的風格指南是非常重要的:)
  • 隨着MVVM,你MyThingsCollection不應該的UserControl一個集合,但他們應該是集合了虛擬機的
  • 不要創建虛擬機在查看的代碼隱藏(除非你確定你在做什麼)。這不僅會重置您的虛擬機,而且會每隔一段時間執行一次,View會被創建出來,這在MVVM中尤其不可取。
  • 即使您想自己做事情,也要在使用MVVM啓動時使用MVVM輔助程序庫。學習這個系統,然後自己做,而不是馬上走長路。
  • 不要在VM中保存查看相關元素。這是打破MVVM。只是不要這樣做。有的方式來避免需要這樣做,即使你認爲那裏只是一個替代。只是搜索電子
+0

我在這裏寫錯了,實際上它是虛擬機的集合。感謝您的建議。當我在MVVM Light中創建一個項目時,會出現一些我認爲不需要的東西,這會讓我感到不安。 – Sturm

+0

@很好,如果你不需要的東西擺脫它。或者創建一個標準的WPF應用程序,並添加MVVMLight DLL作爲參考,並從那裏構建它。諸如'ViewModelBase','ObservableObject','RelayCommand','SimpleIOC'等東西都值得使用,而不需要在啓動時修改IMO – Viv

+0

「我認爲不需要而且會打擾我」 - 你怎麼做不明白(你自己這麼說)打擾你?他們應該是你想立即查看並看到他們做的事情,如果你認爲他們沒有意義,你可以相應地重構它們。警惕任何你不明白的事情,不會教你很多。 – Viv

0

如果您確定您的視圖模型實現,然後嘗試更改您的綁定語法。

IsChecked="{Binding path=marked, Mode=TwoWay}"