Код Silverlight от XAML - PullRequest
       31

Код Silverlight от XAML

0 голосов
/ 10 марта 2011

У меня есть следующий код в XAML:

<data:DataGridTemplateColumn>

   <data:DataGridTemplateColumn.CellTemplate>

      <DataTemplate>

         <Image x:Name="picture" Width="200" Height="130" Visibility="Visible"/> 

      </DataTemplate>

   </data:DataGridTemplateColumn.CellTemplate>

</data:DataGridTemplateColumn>

Как бы это сделать в коде (C #), не используя этот код XAML?

EDIT:

Вот решение, которое я использую:

Создание шаблона данных Silverlight в коде

Это позволяет мне делать именно то, что я хочу.

1 Ответ

0 голосов
/ 10 марта 2011

Например, у вас есть простой DataGrid

    <sdk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTemplateColumn CellTemplate="{StaticResource ImageCellTemplate}"/>
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>

Если вы хотите применить несколько шаблонов к одному DataGridRow, вы можете изменить видимость внутренних частей внутри шаблона:

    <DataTemplate x:Key="ImageCellTemplate">
        <Grid>
            <StackPanel Orientation="Horizontal" Visibility="{Binding IsImageTemplate}">
                <Image Width="20" Height="20"/>
                <TextBlock Text="{Binding Title}"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Visibility="{Binding IsTextBoxTemplate}">
                <TextBlock Text="{Binding Id}" Foreground="Red"/>
                <TextBox Text="{Binding Title}"/>
            </StackPanel>
        </Grid>
    </DataTemplate>

Существует деталь с Image и деталь с TextBox, которые связаны со свойствами модели представления элемента (IsImageTemplate и IsTextBoxTemplate соответственно). Они являются взаимоисключающими, и панели не будут закрывать друг друга.

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        var items = new List<ItemViewModel>()
        {
            new ItemViewModel{Id = 1, Title="First", IsImage = true},
            new ItemViewModel{Id = 2, Title="Second", IsImage = false},
            new ItemViewModel{Id = 3, Title="Third", IsImage = false}
        };
        this.DataContext = new MainViewModel { Items = items };
    }
}

public class MainViewModel
{
    public List<ItemViewModel> Items { get; set; }
}

public class ItemViewModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public bool IsImage { get; set; }

    public Visibility IsImageTemplate
    {
        get { return (IsImage == true) ? Visibility.Visible : Visibility.Collapsed; }
    }

    public Visibility IsTextBoxTemplate
    {
        get { return IsImage == false ? Visibility.Visible : Visibility.Collapsed; }
    }
}
...