我目前的Binding
有问题,因为按Button
后,它应该关闭某个Window
,但没有。这是对情况的更详细描述:
在我的应用程序中,我具有以下按钮:
按下后,将启动新的Window
。它包含一个UserControl
,并用作DialogBox
来确认用户要保存所有更改。这是启动DialogBox (Window)
的代码。请注意,该窗口是通过引用传递的:
private void OpenRegisterDialog(string changes)
{
window = new Window
{
Title = "Confirmation",
ResizeMode = ResizeMode.NoResize,
WindowStartupLocation = WindowStartupLocation.CenterScreen
};
SaveConfirmationDg = new SaveConfirmationDialog(ref window);
window.ShowDialog();
}
请注意,Content
中的Window
尚未设置,我将在此进行记录。
DialogBox
的外观如下(按 OUI 或 NON 时,窗口应该关闭,但不是):
这是用于生成DialogBox
的xaml,UserControl
嵌套在我们的DialogBox Window
中。
SaveConfirmation.xaml
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Height="200" Width="350" Background="Black">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" Text="Voulez-vous enregistrer les modifications?" />
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<Button Foreground="White" Content="OUI" Command="{Binding Close}" CommandParameter="close" Margin="10,0" />
</Grid>
<Grid Grid.Column="1">
<Button Foreground="White" Content="NON" Command="{Binding Close}" CommandParameter="close" Margin="10,0" />
</Grid>
</Grid>
在使用MVVM模式时,我将DataContext
中的Code-Behind
设置为 SaveConfirmationDialogViewModel.cs (请注意,创建的窗口将作为参考传递)
public SaveConfirmationDialog(ref Window window)
{
InitializeComponent();
DataContext = new SaveConfirmationDialogViewModel(ref window);
}
最后,这是我创建和分配Content
中的DialogBox
的方法:
SaveConfirmationDialogViewModel.Cs
class SaveConfirmationDialogViewModel : ViewModelBase
{
public Window CurrentWindow;
public MyICommand<string> Close { get; private set; }
SaveConfirmationDialog SaveConfDg;
public SaveConfirmationDialogViewModel(ref Window window)
{
SaveConfDg = new SaveConfirmationDialog();
window.Content = SaveConfDg;
window.SizeToContent = SizeToContent.WidthAndHeight;
CurrentWindow = window;
Close = new MyICommand<string>(ExitDialog);
}
private void ExitDialog(string exit)
{
CurrentWindow.Close();
}
}
请注意,CurrentWindow
被分配了一个window
的引用,以便可以在Constructor
之外使用它。按下 OUI 和 NON 按钮后,应使用ExitDialog
的{{1}}方法关闭Close command
,但我发现甚至没有打电话,因为我已经通过设置断点进行了检查。
我认为问题可能出在DataContext上。有谁知道问题可能在哪里 是吗?
谢谢!
答案 0 :(得分:0)
最后,问题非常简单,我只需要注释掉Constructor
的第一行并从SaveConfirmationDialog
传递Code-Behind
对象
SaveConfirmationDialogViewModel.cs
public SaveConfirmationDialogViewModel(ref Window window, SaveConfirmationDialog SaveConfDg)
{
//SaveConfDg = new SaveConfirmationDialog();
window.Content = SaveConfDg;
window.SizeToContent = SizeToContent.WidthAndHeight;
CurrentWindow = window;
Close = new MyICommand<string>(ExitDialog);
}
SaveConfirmationDialog.xaml.cs
public SaveConfirmationDialog(ref Window window)
{
InitializeComponent();
//Added this as second parameter
DataContext = new SaveConfirmationDialogViewModel(ref window, this);
}