【发布时间】:2018-02-27 13:45:58
【问题描述】:
我创建了一个演示项目,在我的 MainWindow 和运行时创建的子对象之间进行双向数据绑定,该子对象从 UserControl 和 INotifyPropertyChanged 派生,顶部有一个 TextBox。我的来源是我的 MainWindow 上的私人 List<Byte>。
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private List<Byte> buffer;
public MainWindow()
{
Binding binding;
binding = new Binding("Buffer");
binding.ElementName = "window";
binding.Mode = BindingMode.TwoWay;
myEdit = new MyEdit();
myEdit.SetBinding(MyEdit.BufferValueProperty, binding);
}
public List<Byte> Buffer
{
get
{
return this.buffer;
}
set
{
this.buffer = value;
NotifyPropertyChanged("Buffer");
}
}
private void NotifyPropertyChanged(String propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
现在我想在我的实际项目中实现它。但我的数据源不在 MainWindow 中,它在另一个没有 XAML 代码的简单类中。
public class SimpleClass: INotifyPropertyChanged
{
private List<Byte> buffer;
public event PropertyChangedEventHandler PropertyChanged;
public SimpleClass()
{
this.buffer = new List<Byte>();
Binding binding;
binding = new Binding("Buffer");
binding.ElementName = "?????????";
binding.Mode = BindingMode.TwoWay;
myEdit = new MyEdit();
myEdit.SetBinding(MyEdit.BufferValueProperty, binding);
}
}
我的问题是,我在哪里可以获得绑定的 ElementName?这种方式可以吗?
【问题讨论】:
-
为什么不直接在xaml中绑定
<TextBox text=binding someproperty/> -
在使用 WPF 时,您确实想使用 MVVM 模式。如果你不使用 MVVM,你很有可能会为自己创造更多的工作。这里似乎就是这种情况。正如@Eldho 指出的那样,使用 xaml 进行绑定要简单得多。
-
myEdit.SetBinding- 这不是 WPF 数据绑定应该使用的方式。您不应在源类(即视图模型)中创建和分配绑定。
标签: c# wpf data-binding