一個新手問題,但我不能得到它的工作。在嘗試使用答案SO "How Should the View Model Close the form" ,我有一個用戶控件與定義:無法使用附加屬性(MVVM)關閉模式對話框?
其在設計節目<UserControl
.....
h:DialogCloser.DialogResult="{Binding DialogResult}"
>
:
Property 'DialogResult' is not attachable to elements of type 'UserControl'.
的DialogCloser被定義爲:
public static class DialogCloser
{
public static readonly DependencyProperty DialogResultProperty =
DependencyProperty.RegisterAttached(
"DialogResult",
typeof(bool?),
typeof(DialogCloser),
new PropertyMetadata(DialogResultChanged));
private static void DialogResultChanged(
DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
var window = d as Window;
if (window != null)
window.DialogResult = e.NewValue as bool?;
}
public static void SetDialogResult(Window target, bool? value)
{
target.SetValue(DialogResultProperty, value);
}
}
的UserControl被打開:
var win = new WindowDialog();
win.Title = title;
win.DataContext = datacontext;
return win.ShowDialog();
在視圖模型的用戶控件,我有:
public new void DoExit()
{
DialogResult = true;
}
private bool? dialogresult;
public bool? DialogResult
{
get
{
return dialogresult;
}
set
{
if (dialogresult != value)
{
dialogresult = value;
OnPropertyChanged("DialogResult");
}
}
}
使用DoExit(),模態對話框,我的用戶,確實不接近。怎麼了?我如何讓設計師(VS 2010)不會拋出錯誤?
非常感謝您的幫助。
附錄:
public class ModalDialogService : IModalDialogService
{
public bool? ShowDialog(string title, object datacontext)
{
var win = new WindowDialog();
win.Title = title;
win.DataContext = datacontext;
return win.ShowDialog();
}
}
注:如果 「用戶控件」 的,而不是作爲一個 「窗口」 時,設計師是幸福的,但隨後的錯誤是:
"Window must be the root of the tree. Cannot add Window as a child of Visual."
幫助別人?
這段代碼從哪裏來??'var win = new WindowDialog();' – Sheridan 2014-09-19 13:27:35
@Sheridan在另一個視圖模型(另一個用戶控件)中。 – 2014-09-19 13:28:47
如果它包含該代碼,那麼它不是視圖模型。視圖模型不應該知道關於'窗口'和視圖的*任何*。在這種情況下,無論如何你的'視圖模型'被破壞,只要正常處理'Window.Close':'if(win.ShowDialog()== DialogResult.OK)DoSomething();' – Sheridan 2014-09-19 13:32:41