我正在學習和創建我的第一個WPF應用程序試圖實現MVVM設計模式,但我似乎無法解決爲什麼此屬性不會解僱其設置訪問器,所以我可以使用我擁有的OnPropertyChanged方法。真的很感謝解釋,爲什麼這不能按我的預期工作。模型屬性沒有擊中集訪問器在WPF MVVM項目
我不明白的部分是在ViewModel的GetChargeUnits方法中,我創建了我的電荷單元模型的一個實例,並將該屬性設置爲讀者的結果(此讀者確實返回結果)該屬性設置好嗎?但是,在單步執行時,它不會在屬性中觸發Set行,因此我無法檢測它是否已更改。在這個方法中評論的部分是我最初嘗試過很多組合的原因。
請幫幫忙,謝謝
型號:
public class ChargeUnit : INotifyPropertyChanged
{
private string _chargeUnitDescription;
private int _chargeUnitListValueId;
public event PropertyChangedEventHandler PropertyChanged;
public ChargeUnit()
{
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public string ChargeUnitDescription
{
get { return _chargeUnitDescription; }
set
{
_chargeUnitDescription = value;
OnPropertyChanged("ChargeUnitDescription");
}
}
public int ChargeUnitListValueId
{
get { return _chargeUnitListValueId; }
set
{
_chargeUnitListValueId = value;
OnPropertyChanged("ChargeUnitListValueId");
}
}
視圖模型:
public class ClientRatesViewModel
{
private IList<ClientRates> _clientRatesPreAwr;
private IList<ClientRates> _clientRatesPostAwr;
private List<ChargeUnit> _chargeUnits;
private const string _connectionString = @"connectionString....";
public ClientRatesViewModel()
{
_clientRatesPreAwr = new List<ClientRates>
{
new ClientRates {ClientRatesPreAwr = "Basic"}
};
_clientRatesPostAwr = new List<ClientRates>
{
new ClientRates{ClientRatesPostAwr = "Basic Post AWR"}
};
_chargeUnits = new List<ChargeUnit>();
}
public IList<ClientRates> ClientRatesPreAwr
{
get { return _clientRatesPreAwr; }
set { _clientRatesPreAwr = value; }
}
public IList<ClientRates> ClientRatesPostAwr
{
get { return _clientRatesPostAwr; }
set { _clientRatesPostAwr = value; }
}
public List<ChargeUnit> ChargeUnits
{
get { return _chargeUnits; }
set { _chargeUnits = value; }
}
public List<ChargeUnit> GetChargeUnits()
{
using (var connection = new SqlConnection(_connectionString))
{
connection.Open();
using (var command = new SqlCommand("SELECT LV.ListValueId, LV.ValueName FROM tablename", connection))
{
command.CommandType = CommandType.Text;
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var test = new ChargeUnit();
test.ChargeUnitDescription = reader["ValueName"].ToString();
//_chargeUnits.Add(new ChargeUnit
//{
// ChargeUnitDescription = reader["ValueName"].ToString(),
// ChargeUnitListValueId = (int)reader["ListValueId"]
//});
}
}
}
}
return new List<ChargeUnit>();
}
,你檢查你的VS設置getter和setter方法?這是爲VS 2013,但你可能可以谷歌那個其他版本。 轉到工具 - >選項 - >調試 - >常規。 然後在右側取消選中「Step over properties and operators(Managed only)」 – 2015-03-30 20:23:02
@FrankJ您破解了它!非常感謝 – 2015-03-30 20:47:15
@FrankJ剛剛意識到這是問題的一部分,因爲當我將它設置在ViewModel中時,它已跳入集合中,但是當我更改組合框中的值時,我的模型中的ChargeUnitDescription屬性從未達到Set ,但是它總會返回我剛剛選擇的更新後的值? – 2015-03-31 14:56:17