如果我继承MainWindow,应用程序不会启动

时间:2013-06-05 07:43:09

标签: c# wpf mainwindow

我有一个RootViewModel类,我想从那里访问一个UI元素(在MainWindow中实例化)。为此我以这种方式设置课程:

 class RootViewModel : MainWindow, INotifyPropertyChanged

但应用程序无法启动。它编译并抛出没有错误,但Window不会出现。如果我删除了MainWindow,,则无法访问我在MainWindow.xaml中创建的元素。我该怎么做才能解决这个问题?

编辑:好的,我知道我不应该这样做,它违背了它的MVVM。但有没有办法直接修改MainWindow的东西?我应该尝试什么呢?

3 个答案:

答案 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"

如果您这样做,您可以访问窗口的任何publicprotected成员 - 包括所有子控件,只要他们的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]中发生的事情。在这一刻它对我来说已经足够了,以后我会再试一次将它绑定。感谢您的回复,对不起,这可能是一个有点愚蠢的问题。