我在绑定数据时遇到问题。我想绑定文本的文本框这是在主窗口的另一个文本框这是在儿童窗口。在主窗口中,用户可以在文本框中输入字符串。ChildWindow将只显示一些数据。我已经成功地从MainWIndow绑定了TextBox,我可以看到在调试时它会命中MainWindowViewModel,但是对ChildWindow没有影响。
我的App.xaml.cs看起来像这样:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
var window = new MainWindow() { DataContext = new MainWindowViewModel() };
window.Show();
base.OnStartup(e);
}
}
字符串
然后MainWIndow创建一个ChildWindow的示例,它们都使用相同的ViewModel,如下所示:
public partial class MainWindow : Window
{
public MainWindow()
{
var viewModel = new MainWindowViewModel();
ChildWindow childWindow = new ChildWindow();
childWindow.DataContext = viewModel;
childWindow.Show();
InitializeComponent();
DataContext = viewModel;
}
}
型
主窗口视图模型:
public class MainWindowViewModel : ViewModelBase
{
public string _firstTeamName { get; set; }
public string FirstTeamName
{
get { return _firstTeamName; }
set
{
_firstTeamName = value;
OnPropertyChanged(nameof(FirstTeamName));
}
}
}
型
视图模型库:
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}
}
型
在MainWindow.xaml中绑定:
<TextBox x:Name ="firstTeam" Height="30" VerticalAlignment="Top" Text ="{Binding FirstTeamName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
型
在ChildWindow.xaml中绑定:
<TextBlock Text ="{Binding FirstTeamName}" FontSize="24"></TextBlock>
型
1条答案
按热度按时间ajsxfq5m1#
错误是设置
MainWindow.DataContext
两次。MainWindow
的内部结构1.在
App.OnStartUp
和var window = new MainWindow() { DataContext = new MainWindowViewModel() };
中这里发生了什么
new MainWindow()
将调用构造函数,并将MainWindow
和ChildWindow
的DataContext
设置为MainWindowViewModel
的同一个示例。{ DataContext = new MainWindowViewModel() }
将用MainWindowViewModel
的新示例覆盖MainWindow
的DataContext
。现在,这两个窗口具有ViewModel的两个不同示例,并且不会按预期工作。
这个应该能修好
字符串