如何将我的双向数据绑定从Code-Behind移动到XAML

WFP和C#(长期PHP程序员)相对较新…

我成功地在TextBox和Object的Property之间建立了2-WAY数据绑定。 我能够在Code-Behind中建立绑定,但不能在XAML中建立绑定。

我想学习如何在XAML中进行BINDING。 也就是说,在下面的例子中,如何移动行myTestPanel.DataContext = CURRENT_NETWORK; 从Code-Behind到XAML?

我查看了教程,示例等,但没有帮助……他们似乎希望我将TextBox(或父对象)绑定到CLASS,而不是OBJECT。 一些示例建议使用合适的构造函数绑定到类。 但我不想这样做。 我想绑定一个可能存在一段时间的现有对象。 我可以在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的片段:

     

双向绑定就像梦一样:)我可以在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" ...    ...    

这是一种做法。 阅读一些MVVM教程,您将获得一些其他想法。