這是正常的行爲。
DependencyProperty中指定的綁定表達式(即本例中的Text)將在初始化/加載元素時執行初始綁定(並且從源更新目標...即設置TextBox的Text屬性到指定路徑的源文件中的屬性值(nb忽略目前未指定路徑的情況))。
UpdateSourceTrigger="Explicit"
只是停止自動更新目標中的值(即TextBox的Text屬性)而不發送給源(例如ViewModel/model)....(不要將此選項與控制目標的更新)。
在初始綁定期間,我會想象綁定引擎會看到「源」有一個IDataErrorInfo,因此它會檢查「item」是否有效......如果不是,則會得到標準錯誤圍繞着你的TextBox(由ErrorTemplate定義)......的裝飾者,以便它匹配模型中數據的狀態......這是合乎邏輯的。
要停止所有顯示的錯誤指標視圖的初始加載後過於激進......你可以嘗試這種解決方法。
讓你在什麼時候會進行有效性檢查邏輯控制你可以改變你IDataErrorInfo的。
有觀點已經被加載後,時設置一個標誌......它允許運行IDataErrorInfo的驗證碼...而不是之前。
從這一點一旦裝上,呼籲UpdateSource將大火將捕獲無效數據的驗證(因爲您的加載標誌將是真實的,您的驗證邏輯會做它的魔力)。
你可以使用這樣的事情:
public class CustomerViewModel : IDataErrorInfo
{
public bool DoValidation { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Error
{
get
{
if (DoValidation)
{
if (error on any properties)
return "error on these .....";
}
return null; // no errors
}
}
public string this[string columnName]
{
get
{
if (!DoValidation)
{
return null;
}
string result = null;
if (columnName == "FirstName")
{
if (string.IsNullOrEmpty(FirstName))
result = "Please enter a First Name";
}
if (columnName == "LastName")
{
if (string.IsNullOrEmpty(LastName))
result = "Please enter a Last Name";
}
return result;
}
}
}
在模型上設置的DoValidation性質已經發生Loaded事件之後。
你可以複製和粘貼你使用的XAML ....謝謝。 –