[英]How to move my 2-way Data Binding from Code-Behind to XAML
WFP和C#(長期PHP程序員)相對較新...
我成功地在TextBox和Object的Property之間建立了2-WAY數據綁定。 我能夠在Code-Behind中建立綁定,但不能在XAML中建立綁定。
我想學習如何在XAML中進行BINDING。 也就是說,在下面的示例中,如何移動行myTestPanel.DataContext = CURRENT_NETWORK;
從Code-Behind到XAML?
我看了教程,示例等,但沒有幫助...他們似乎希望我將TextBox(或父對象)綁定到CLASS,而不是對象。 一些示例建議使用適當的構造函數綁定到類。 但我不想這樣做。 我想綁定到可能已經存在一段時間的“現有對象”。 我可以在Code-Behind中做到這一點......但是如何在XAML中做到這一點呢?
這是我的代碼背后:
namespace net
{
public class network
{
public int ID { get; set; } // Property bound to TextBox
}
public partial class MainWindow : Window
{
network CURRENT_NETWORK = new network(); // My OBJECT (which could have been around for a while)
public MainWindow()
{
InitializeComponent();
CURRENT_NETWORK.ID = 123; // The object gets set up...
// ** Below is the line I want to learn how to move to XAML **
myTestPanel.DataContext = CURRENT_NETWORK; // <- CRITICAL LINE
}
}
}
這是XAML的代碼段:
<Window x:Class="net.MainWindow"
// some lines omitted
xmlns:local="clr-namespace:net"
>
<DockPanel Name="myTestPanel" >
<TextBox Text="{Binding Path=ID, Mode=TwoWay}"></TextBox>
</DockPanel>
雙向綁定就像夢一樣:)我可以在TextBox中看到對象的ID屬性中的值,相反,如果我在TextBox中編輯數字,則對象被正確修改。 (我發現用一個按鈕彈出一個消息框,我的代碼片段中沒有顯示。)
但是如何將TextBox和EXISTING OBJECT之間的關鍵綁定(即行myTestPanel.DataContext = CURRENT_NETWORK;
)從Code-Behind移動到XAML? 謝謝!
PS:為什么要在XAML中進行綁定? 部分原因是為了學習 ,部分原因是因為XAML已經包含Property的名稱,因此我認為它會更加優雅/可讀。 即,我想在XAML中進行所有綁定,而不是在其中進行某些綁定以及在Code-Behind中進行某些綁定。
抱歉,我無法添加評論,因此將其發布為答案。 我建議你只是有一個單獨的類作為你的ViewModel,例如NetWorkViewModel
,在你的ViewModel中創建一個EXISTING OBJECT類型的屬性,並改變XAML中的綁定。
public class NetworkViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private Network _model;
public Network Model
{
get { return _model; }
set
{
_model = value;
OnPropertyChanged("Model");
}
}
private void OnPropertyChanged(string propertyName)
{ }
}
public class Network : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _id;
public int Id
{
get { return _id; }
set
{
_id = value;
OnPropertyChanged("Id");
}
}
private void OnPropertyChanged(string propertyName)
{ }
}
在您的Xaml中
xmlns:vm="clr-namespace:net"
...
<Window.DataContext>
<vm:NetworkViewModel />
</Window.DataContext>
...
<DockPanel Name="myTestPanel" >
<TextBox Text="{Binding Path=Model.Id, Mode=TwoWay}"></TextBox>
</DockPanel>
這是一種方法。 閱讀一些MVVM教程,您將獲得其他一些想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.