打开一个新的WPF窗口

时间:2014-09-15 19:19:39

标签: c# wpf

我正在尝试使用弹出按钮,这样当点击它时,当前网格将出现在一个填充了完全相同信息的新窗口中。

我出现了新的窗口,但我试图设置绑定但不确定如何做到这一点。如果我能得到一些帮助请。当我执行OpenChildWindow时,它会打开但没有任何填充。

视图模型:

public ObservableCollection<PaymentInfo> AmortizationCollection {get; set;}
public void OpenChildWindow()
{
    new ScheduleView().Show();
}

LoanView.xaml和ScheduleView.xaml

<telerik:RadGridView Grid.Row="3" Grid.ColumnSpan="3" x:Name="AmortGrid" 
                     ScrollViewer.CanContentScroll ="True" 
                     SelectedItem="{Binding SelectedRow, Mode=TwoWay}" 
                     Height="650"  AutoGenerateColumns="True" ScrollViewer.VerticalScrollBarVisibility="Auto" 
                     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                     ShowGroupPanel="False"  
                     ItemsSource="{Binding AmortizationCollection, Mode=TwoWay}">

我尝试内容设置

Scheduleview.xaml.cs

public ObservableCollection<PaymentInfo> AmortizationCollection { get; set; } 
public ScheduleView()
{
    InitializeComponent();
    AmortGrid.ItemsSource = Content;
}

视图模型:

public void OpenChildWindow()
{
     ScheduleView _newScheduleView = new ScheduleView();
     _newScheduleView.Content = AmortizationCollection;
     _newScheduleView.Show(); 
}

窗口刚出现(Collection)没有datagrid或anyhting。

2 个答案:

答案 0 :(得分:0)

如果是Window,那么您可以尝试为其设置一些内容,这样您将传递的新控件将被设置为新窗口的内容。我认为你的代码中缺少此属性,直到现在。

// create instance
ScheduleView wind = new ScheduleView();
// set the content, can be a window or a page or anything
wind.Content = new SomeControl;
// show it.
wind.Show();

http://msdn.microsoft.com/en-us/library/system.windows.window.content(v=vs.95).aspx

Stack Overflow的前一个帖子有这个,但是方式过于笼统。

Changing content of Window (WPF)

答案 1 :(得分:0)

使用WPF时,我们倾向于使用DataTemplate来定义我们的数据对象在UI中的外观,因此要重新创建一些UI控件,我们只需要传递数据对象并确保{{{可以从两个位置访问1}}。您显示的是“视图模型”中的代码,但是视图模型不应该对视图有任何了解,当然也不会打开这样的新窗口。

但是,除了错误的术语外,最简单的解决方案是将集合简单地传递给构造函数中的新DataTemplate

Window

然后在public void OpenChildWindow() { ScheduleView _newScheduleView = new ScheduleView(AmortizationCollection); _newScheduleView.Show(); }

ScheduleView.xaml.cs

只要你在每个地方都有相同的XAML,它应该看起来一样。