簡體   English   中英

如何將我的雙向數據綁定從Code-Behind移動到XAML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM