Для тех из вас, кто использует Expression Blend , а также Visual Studio в ваших реальных проектах, пожалуйста, помогите мне понять , как вы используете Blend и Visual Studio в повседневных задачах разработки / проектирования Вот реальный сценарий:
Я создал следующее простое приложение WPF в Visual Studio. показывает список объектов клиентов с DataTemplate , который показывает клиентов в простых оранжевых прямоугольниках.
Теперь я хочу добавить немного стиля в этот шаблон данных с помощью Expression Blend.
Я открываю проект в Expression Blend , думая, что я увижу оранжевые прямоугольники, цвет которых я могу изменить, создаю анимацию при наведении на них курсора, изменяю ее размер и т. Д. Однако , все, что я вижу в Expression Blend - это полностью пустое поле .
Итак, я понимаю:
- Expression Blend не может понять, что мои данные поступают из ViewModel и, следовательно, не отображают их. Это ограничение Blend или мне нужно каким-то образом изменить свой код, чтобы Blend мог интерпретировать, какие данные будут выводиться во время выполнения?
- Я использую Expression Blend 3, которая имеет возможность «выборки данных». Каков наилучший способ использовать этот пример данных , чтобы, даже если он не может интерпретировать C # и понять, какие данные будут поступать из свойства ViewModel для заполнения списка, как я могу его получить? по крайней мере, создать некоторые фиктивные данные, чтобы я мог манипулировать DataTemplate?
XAML:
<Window x:Class="TestStringFormat234.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="DataTemplateCustomers">
<Border CornerRadius="5" Background="Orange" Padding="5" Margin="3">
<StackPanel Orientation="Horizontal">
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1} (hired on {2:MMM dd, yyyy})">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
<Binding Path="HireDate"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding GetAllCustomers}"
ItemTemplate="{StaticResource DataTemplateCustomers}">
</ListBox>
</Grid>
</Window>
Код сзади:
using System.Windows;
using System.Collections.ObjectModel;
using System;
namespace TestStringFormat234
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = new CustomerViewModel();
}
}
//view model
public class CustomerViewModel
{
public ObservableCollection<Customer> GetAllCustomers {
get {
ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
customers.Add(new Customer { FirstName = "Jim", LastName = "Smith", HireDate = DateTime.Parse("2007-12-31") });
customers.Add(new Customer { FirstName = "Jack", LastName = "Jones", HireDate = DateTime.Parse("2005-12-31") });
return customers;
}
}
}
//model
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime HireDate { get; set; }
}
}