DataGridColumn Заголовок содержимого WPF - PullRequest
1 голос
/ 29 января 2012

Я хочу локализовать презентацию, и у меня от этого зависает мозг.Я использую расширение разметки, поэтому вместо этого:

<DataGridTextColumn Header="Number" Binding="{Binding Number}" Width="60" CellStyle="{StaticResource NumberStyle}" />

Я хочу это:

<DataGridTextColumn Header="{Resx Key=Header_Number}" Binding="{Binding Number}" Width="60" CellStyle="{StaticResource NumberStyle}" />

, где разметка, которая хорошо протестирована, просто вернет правотекст для текущей культуры.Но это не работает.Я предполагаю, что мне нужен либо HeaderStyle, либо HeaderTemplate, но ...

Что за исправление?

Cheers,
Berryl

EDIT

Byне работает, я имею в виду, что он не возвращает текст «Number» на английском языке, а вместо этого возвращает значение по умолчанию (т. е. «#Header_Number).

By работает,Я имею в виду, что

    <Label FontWeight="Bold" Grid.Row="0" Grid.Column="0" Content="{Resx Key=Label_Amount}"/>

возвращает "Сумма" в то время как на английском языке.

ФИНАЛЬНОЕ РЕДАКТИРОВАНИЕ

Мое плохо, это действительно больше результат того факта, что таблица данных WPFстолбцы, чтобы не наследовать DataContext своего родителя.

Расширение разметки имеет свойство ResxName, которое я хотел бы установить один раз для всего окна:

    resx:ResxProperty.Name="NMoneys.Presentation.Resources.AllocatorView"
    Title="{Resx Key=Window_Title}" 

Но так как заголовки в данныхСетка не является частью визуального дерева (хотя кажется, что так и должно быть!), я должен снова указать имя Resx, как в

            <DataGridTextColumn Header="{Resx ResxName=NMoneys.Presentation.Resources.AllocatorView, Key=ColumnHeader_Number}" Binding="{Binding Number}" Width="60" CellStyle="{StaticResource NumberStyle}" />

, с которыми я сталкивался ранееи видел несколько методов для пересылки DC, но в этом случае это не стоит беспокоиться.

Ура
Беррил

1 Ответ

1 голос
/ 30 января 2012

Я предполагаю, что у вас есть модели, представляющие ваши сущности.Я использовал аннотации данных.Вот пример.Изменить: Предоставлены классы MVVM со скриншотами

Модель

using System.ComponentModel.DataAnnotations;

using Silverlight.Infrastructure.Properties;

namespace Silverlight.Infrastructure.Models
{
    public class Customer
    {
        [Display(ResourceType = typeof(Resources), Name = "CustomerIdHeader")]
        public int Id { get; set; }

        // There must be an entry CustomerNameHeader in the resources else it 
        // will throw an exception
        [Display(ResourceType = typeof(Resources), Name = "CustomerNameHeader")]
        public string Name { get; set; }
    }
}

Содержимое заголовка будет автоматически привязано к отображению свойства.

ViewModel

using Silverlight.Infrastructure.Models

namespace Silverlight.ModuleA.ViewModels
{
    //Prism namespaces
    public class CustomerViewModel : NotificationObject
    {
        public CustomerViewModel()
        {   
            // service for my customers.
            CustomeService customerService = new CustomerService();
            Customers = customerService.GetCustomers()
        }   

        public ObservableCollection<Customer> Customers {get;set;}
    }
}

Просмотр

<UserControl>
    <Grid x:Name="LayoutRoot">
        <data:DataGrid x:Name="CustomerGrid" ItemsSource="{Binding Customers}" AutoGenerateColumns="False" >
                    <data:DataGrid.Columns>
                        <data:DataGridTextColumn Binding="{Binding Id, Mode=TwoWay}" />
                        <data:DataGridTextColumn Binding="{Binding Name, Mode=TwoWay}"/>
                        <data:DataGridTextColumn Binding="{Binding Surname, Mode=TwoWay}"/>
                        <data:DataGridTextColumn Binding="{Binding Company, Mode=TwoWay}"/>
                    </data:DataGrid.Columns>
            </data:DataGrid>
    </Grid>
</UserControl>

The DataGrid in the program!

И затем ресурсы в типе (StringLibrary)

Resource File

Как видно, имя дисплея равно ResourceKey в файле ресурсов.Впервые я разработал аннотации, примерно 2-3 недели назад, когда разрабатывал и тестировал с использованием XML.Но такие вещи, как AutoMapper, могут отображать ваши объекты в pocos, подобные этим, или вы даже можете использовать службы WCF RIA, и вы можете иметь похожие аннотации.WCF RIA - фактически тот, кто использует их, но я просто использую их по-другому.

Может быть несколько приемов здесь и там, чтобы выполнить это.Но когда вы это сделаете, вы действительно получите простое решение.

Я надеюсь, что предоставил достаточно информации.

...