![](/img/trans.png)
[英]Why do I get “Invalid Parameter binding” when using Oracle stored procedure with Udt and C#
[英]Why do I not get any text when I am binding a string to my XAML using a propertychanged? C# Xamarin
嘗試通過字符串將文本綁定到我的xaml並使用屬性更改的函數根據int的值更改文本。 這是我的代碼:
XAML:
<Label Text = "{Binding Forename}" />
碼:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged (string propertyName)
{
var changed = PropertyChanged;
if (changed != null) {
PropertyChanged (this, new PropertyChangedEventArgs (propertyName));
}
}
string info;
int myInt = 0;
public string Forename {
get {
return info;
}
set {
if (myInt == 0) {
info = value;
OnPropertyChanged ("TextOne");
}
else if (myInt == 1)
{
OnPropertyChanged ("TextTwo");
}
else
{
OnPropertyChanged ("TextThree");
}
}
}
我現在沒有短信。
這不是OnPropertyChanged()
工作方式。 您不應將要顯示的新文本作為參數傳遞,而應將新文本分配給info字段,並將屬性名稱作為參數。
OnPropertyChanged(name)
作用是告訴XAML屬性name
已更改,XAML將在該屬性name
上獲取該屬性,並相應地更新顯示的值。
public string Forename {
get {
return info;
}
set {
if (myInt == 0) {
info = value;
OnPropertyChanged ("Forename");
}
else if (myInt == 1)
{
info = "TextTwo";
OnPropertyChanged ("Forename");
}
else
{
info = "TextThree";
OnPropertyChanged ("Forename");
}
}
}
編輯
當您對應放入protected virtual void OnPropertyChanged(string propertyName)
疑問時,該函數就可以了。 調用它時,它將使用PropertyChangedEventHandler PropertyChanged
使事件的所有子訂閱者都知道屬性propertyName已更改。 XAML {Binding Forename}
充當PropertyChanged
的訂閱者/偵聽者,並在得知其綁定的屬性(“ Forename”)已更改時將立即更新其文本。 當您調用OnPropertyChanged("Forename")
時會發生什么。
編輯2似乎您可能忘記了在XAML的代碼背后分配DataContext(將被命名為mainwindow.xaml.cs之類的東西)
InitializeComponent();
ViewModel vm = new ViewModel();
DataContext = vm;
vm.Forename = "TestString"
並將Forename-code內容移到一個單獨的類中,命名為ViewModel。 像這樣:
public class ViewModel{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged (string propertyName)
{
var changed = PropertyChanged;
if (changed != null) {
PropertyChanged (this, new PropertyChangedEventArgs (propertyName));
}
}
string info;
int myInt = 0;
public string Forename {
get {
return info;
}
set {
if (myInt == 0) {
info = value;
OnPropertyChanged ("Forename");
}
else if (myInt == 1)
{
info = "TextTwo";
OnPropertyChanged ("Forename");
}
else
{
info = "TextThree";
OnPropertyChanged ("Forename");
}
}
}
}
通過查看您的代碼,我懷疑您在Binding
犯了最流行的錯誤。 您沒有提出對正確屬性的更改。 想法是XAML必須以某種方式知道屬性已更改以更新UI-因此,請以緊密循環的方式運行,並檢查屏幕上的屬性值是否與此不同,Microsoft附帶了名為PropertyChanged
的delegate
想法。 主要用於吸氣劑/裝夾劑。
使用此委托時必須非常小心,因為在委托的.NET Framework版本4之前, string
-屬性名稱 。 更高版本的.NET Framework帶有特殊屬性CallerMemberName-例如: Jesse Liberty
在這種情況下,您將引發屬性更改事件,但是在參數中,您發送的屬性名稱不存在:(您應該僅發送OnPropertyChanged("Forename")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.