我有一个RootViewModel
类,我想从那里访问一个UI元素(在MainWindow
中实例化)。为此我以这种方式设置课程:
class RootViewModel : MainWindow, INotifyPropertyChanged
但应用程序无法启动。它编译并抛出没有错误,但Window不会出现。如果我删除了MainWindow,
,则无法访问我在MainWindow.xaml
中创建的元素。我该怎么做才能解决这个问题?
答案 0 :(得分:0)
考虑将RootViewModel更改为UserControl
。给它一个DependencyProperty
名为Element的UIElement
。
将RootViewModel添加到MainWindow的XAML并绑定到您要使用的元素,如下所示;
<RootViewModel Element="{Binding ElementName=SourceElement}"/>
答案 1 :(得分:0)
WPF窗口是对象,因此您始终可以手动实例化它们,如下所示:
var foo = new FooWindow(); // new Window object
foo.Show(); // show window as non-blocking "dialog"
如果您这样做,您可以访问窗口的任何public
或protected
成员 - 包括所有子控件,只要他们的Accessibility
属性被相应标记即可。因此,如果FooWindow
有一个名为TextBox
的{{1}},您可以像这样访问它:
txtFooName
您还可以分配给任何公共/受保护成员:
string name = foo.txtFooName.Text // get string value from textbox
现在,foo.txtFooName.Text = "Fizz Buzz, Inc.";
通常设置为应用程序的MainWindow
(在StartupUri
中),这使它成为应用程序的入口点,所以我不完全确定你正试图这样做。
答案 2 :(得分:0)
通过创建
,我能够实现我想要的目标public ObservableCollection<ChartPlotter> myPlotCollection { get; set; }
然后在那里添加ChartPlotter,并在XAML中设置:
<DockPanel Grid.Column="2">
<ItemsControl Width="Auto"
Height="Auto"
ItemsSource="{Binding myPlotCollection}">
</ItemsControl>
</DockPanel>
因此,我可以完全控制myPlotCollection [0]中发生的事情。在这一刻它对我来说已经足够了,以后我会再试一次将它绑定。感谢您的回复,对不起,这可能是一个有点愚蠢的问题。