2017-10-04 60 views
0

我一直在努力尋找一種方法來計算所選月份中沒有周末的總天數。 (MDate被綁定到我的日期選擇器)將參數傳遞給ViewModel中的linq查詢的正確方法

作爲一個絕對的初學者我也沒有認識到我的數據參數(mDate)傳遞到LINQ查詢,但這裏有多遠,我已經得到了:

public class LocationViewModel : INotifyPropertyChanged 
{ 

public LocationiewModel() 
{ 
    SetDaysInMonth(); 
} 

private DateTime mDate = DateTime.Now; 

public DateTime MDate 
{ 
    get { return mDate; } 
    set 
    { 
     if (value == mDate) 
     { 
      return; 
     } 
     else 
     { 
      mDate = value; 
      OnPropertyChanged("MDate"); 

      SetDaysInMonth(); 
     } 

    } 

} 

int _daysInMonth; 

public int DaysInMonth 
{ 
    get { return _daysInMonth; } 
    set 
    { 
     _daysInMonth = value; 
     OnPropertyChanged("DaysInMonth"); 
    } 
} 

private void SetDaysInMonth(DateTime mDate) 

{ 
    int DaysInMonth = Enumerable.Range(1, DateTime.DaysInMonth(mDate.Year, mDate.Month)) 
           .Select(day => new DateTime(mDate.Year, mDate.Month, day)) 
           .Count(d => d.DayOfWeek != DayOfWeek.Sunday && 
              d.DayOfWeek != DayOfWeek.Saturday); 
} 

它使對我來說意義重大,但我顯然缺乏一些東西,因爲我得到以下錯誤:Error CS7036 There is no argument given that corresponds to the required formal parameter 'mDate' of 'LocationViewModel.SetDaysInMonth(DateTime)'

有人可以告訴我我錯過了什麼讓它工作嗎?經過幾個小時的閱讀,我會很感激最終明白我在這裏做錯了什麼。

+1

'SetDaysInMonth(value);'(對於答案太短) –

+0

Gert,我試過了,但我無法讓它工作。錯誤消失了,但結果是0.我做錯了什麼。所有的SetDaysInMonth方法都必須使用「value」嗎?如果您可以通過更改我的代碼來回答問題,那麼我會接受您的答案。謝謝! – iCosmin

回答

1

通過執行以下操作

Enumerable.Range(1, DateTime.DaysInMonth(2017, 10)) 
          .Select(day => new DateTime(2017, 10, day)) 
          .Count(day => day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday) 

結果測試了LINQ是22這是正確的。

我建議簡化您的setter以下

private DateTime mDate = DateTime.Now; 
    public DateTime MDate 
    { 
     get { return mDate; } 
     set 
     { 
       mDate = value; 
       OnPropertyChanged("MDate"); 

       SetDaysInMonth(); 
     } 
} 

這是因爲你還沒有已經落入這個代碼塊可能會解決問題。

此外,請驗證輸出窗口是否未拋出任何綁定錯誤,並且您的綁定模式設置正確。

1

我還沒有測試過你的linq;但是你的參數傳遞和對屬性的引用是不正確的。如果你的LINQ是好的,下面的改變將解決這個問題。

無需傳遞參數,可以直接使用MDate屬性。同樣,您可以設置DaysInMonth直接。

private void SetDaysInMonth() 

{ 
    this.DaysInMonth = Enumerable.Range(1, DateTime.DaysInMonth(this.MDate.Year, this.MDate.Month)) 
           .Select(day => new DateTime(this.MDate.Year, this.MDate.Month, day)) 
           .Count(d => d.DayOfWeek != DayOfWeek.Sunday && 
              d.DayOfWeek != DayOfWeek.Saturday); 
} 
+0

非常感謝你,loopedcode,我們在那裏!我已經擺脫了錯誤,我希望它會工作,但我的查詢結果是0時,我將它綁定到文本框。我在查詢中缺少什麼? – iCosmin