我正在嘗試實作 MVVM 模式,并且已經有 DataTemplatesApp.xaml并將 ViewModel 系結為 DataContext。
應用程式.xaml:
<DataTemplate DataType="{x:Type Models:InputViewModel}">
<Views:InputView/>
</DataTemplate>
用戶控制:
<UserControl.DataContext>
<Models:InputViewModel/>
</UserControl.DataContext>
現在,當我想通過命令顯示新視圖時,我為ViewModel屬性分配了一個新實體,該型別是擴展所有 ViewModel 的抽象基類。
public ICommand DisplayInputView
{
get
{
return new DelegateCommand(action => ViewModel = new InputViewModel());
}
}
這會導致 ViewModel 的建構式被呼叫兩次,一次由命令呼叫,一次由視圖的建構式呼叫。因此,不考慮我想通過命令傳遞到下一個視圖模型的引數。
public ICommand DisplayInputView
{
get
{
return new DelegateCommand(Input);
}
}
void Input(object control)
{
ViewModel = new InputViewModel();
InputViewModel.AuditControl = control as AuditControl ?? new AuditControl();
}
如何定義 DataTemplate 和 Datacontex 以便視圖模型的建構式只執行一次并且我可以通過命令傳遞引數?
uj5u.com熱心網友回復:
從標記中洗掉<UserControl.DataContext>分配。DataContext將從系結到該屬性的控制元件繼承,ViewModel因此您無需再次設定它。
如果您想要設計時系結,請使用設計時資料背景關系:
<UserControl
...
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:vm="clr-namespace:YourLocalNamespace"
d:DataContext="{d:DesignInstance vm:InputViewModel}"
>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422323.html
標籤:
