我有一个内容控件,可以根据当前状态显示动态内容。这一切都很好但是,在设计时,我希望它显示默认状态。我有什么方法可以使用ValueConverter
或FallbackValue
或其他东西吗?
XAML
<ContentControl Content="{Binding State,
Converter={StaticResource InstallationStateToControlConverter}}" />
C#
class InstallationStateToControlConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//return controls depending on the state
switch ((InstallationState)value)
{
case InstallationState.LicenceAgreement:
return new LicenceAgreementControl();
default:
return new AnotherControl();
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
更新
根据Viv的问题,我已将以下内容添加到我的XAML中,它编译好了,但我仍然没有在设计器中看到任何内容?
d:DataContext="{d:DesignInstance Type=local:LicenceAgreementControl, IsDesignTimeCreatable=True}"
答案 0 :(得分:1)
好的,我终于开始工作了,
这是评论中的多个内容的组合。希望这能为您解决。
假设所有运行时都很好w.r.t查看ContentControl
中显示的模型并排序
这些是我所做的步骤。
ContentControl
Content
绑定值(在您的情况下为State
)将显示默认的ViewModel。示例:
public LicenceAgreementControl() {
State = new NewViewModel();
}
d:DataContext
。DataContext
<{1}}到ContentControl
示例:
<Window.Resources>
<local:LicenceAgreementControl x:Key="LicenceAgreementControl" />
</Window.Resources>
<ContentControl Content="{Binding State}" DataContext="{Binding Source={StaticResource LicenceAgreementControl}}" />
现在提供你可以看到设计时加载的视图很好,我们只能更新我们的设计时间方法,否则问题在于当前正在设置视图模型的方式,需要首先对其进行排序
^^一旦上面的东西工作正常。要将此作为仅设计功能,请从xaml中删除作为资源创建的视图模型,并且还可以从DataContext
中删除显式ContentControl
集。
现在你需要的只是
d:DataContext="{d:DesignInstance Type=local:LicenceAgreementControl, IsDesignTimeCreatable=True}"
在xaml文件中你应该完成(仍然需要ctor使用你想要在ContentControl
中显示的默认视图模型设置State属性)