private void MainForm_Load(object sender, EventArgs e)
{
FormSplash splash = new FormSplash();
splash.Show();
splash.Update();
System.Threading.Thread.Sleep(3000);
splash.Hide();
}
Я получил это из Интернета где-то, но не могу найти его снова. Простой, но эффективный.
Спасибо, что указал мне правильное направление! Я тоже новичок в WPF и знакомлюсь со всеми возможностями, в том числе и с методами связывания. Во всяком случае, для всех интересующихся, вот решение, к которому я пришел в данном конкретном случае:
Я решил, что хочу сохранить модели просмотра разделенными на два подкласса AddIndividualViewModel и EditIndividualViewModel, которые выставляют только команды, вместо того, чтобы пытаться управлять состоянием в одном классе. Однако я хотел один вид, чтобы не дублировать XAML. В итоге я использовал два DataTemplates и DataTemplateSelector для переключения кнопок действий в зависимости от модели представления:
<DataTemplate x:Key="addTemplate">
<Button Command="{Binding Path=AddCommand}">Add</Button>
</DataTemplate>
<DataTemplate x:Key="editTemplate">
<Button Command="{Binding Path=UpdateCommand}">Update</Button>
</DataTemplate>
<TemplateSelectors:AddEditTemplateSelector
AddTemplate="{StaticResource addTemplate}"
EditTemplate="{StaticResource editTemplate}"
x:Key="addEditTemplateSelector" />
и ведущего контента внизу формы:
<ContentPresenter Content="{Binding}"
ContentTemplateSelector="{StaticResource addEditTemplateSelector}" />
Вот код для селектора шаблонов:
class AddEditTemplateSelector : DataTemplateSelector
{
public DataTemplate AddTemplate { get; set; }
public DataTemplate EditTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is AddIndividualViewModel)
{
return AddTemplate;
}
else if (item is EditIndividualViewModel)
{
return EditTemplate;
}
return null;
}
}
Это может быть, а может и не быть, как реализована конечная вещь (учитывая требования), но приятно видеть, что у меня есть такая возможность.
.Нет причин, по которым ты не можешь этого достичь. Один из способов сделать это - добавить в модель своего вида флаг, указывающий, находитесь ли вы в режиме добавления или в режиме редактирования, и стилизовать свой вид на основе этого флага с помощью простых привязок, триггеров или селекторов шаблонов.
Для справки вы можете посмотреть на Sacha Barber's DataWrapper
class, который является частью его Cinch
framework (не относится непосредственно к вашему случаю, но является хорошей отправной точкой), который обертывает поля данных в модели представления таким образом, чтобы поддерживать флаг переключения между режимами только чтения (режим просмотра записи) и чтения-записи (режим редактирования записи). Вы можете применить аналогичный подход, чтобы различать добавление и редактирование.
В основном, вместо того, чтобы иметь простые свойства в модели представления, создайте класс обертки данных, который включает в себя свойство Value
, и свойство IsAdding
. На ваш взгляд, вы можете использовать привязки, триггеры или селекторы шаблонов для изменения шаблонов на основе этого свойства.
Для этой задачи вам вообще не нужен DataTemplateSelector.
В xaml вы привязываете контентную сетку к свойству виртуальной машины следующим образом: