WPF: Как связать числовое свойство с DataGridTextColumn? - PullRequest
0 голосов
/ 11 сентября 2010

Я думал, что это должно быть просто для WPF, но я не могу заставить его работать ... У меня есть свойство int (Divisions) в моем классе, и я хочу привязать его к столбцу DataGrid.

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
            <DataGridTextColumn Header="Number of Divisions" Binding="{Binding Path=Divisions, StringFormat={}\{0:N0\}}" IsReadOnly="True"/>                
    </DataGrid.Columns>
</DataGrid>

Однако, это не обнаруживается. Я также попробовал этот код, и он также не работает для меня:

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Divisions" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Divisions, StringFormat=C}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Для тестирования purpse, если я добавлю строковое свойство к этому классу, чтобы вернуть строковое значение Divisions, это просто отлично работает. Итак, что здесь не так?

Ответы [ 2 ]

4 голосов
/ 11 сентября 2010

Интересно ... Мне удалось легко заставить вещи работать на следующем (в VS 2010, .NET 4) примере.

Определение моей сетки:

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Number of Divisions" 
                            Binding="{Binding Path=Divisions,  StringFormat={}\{0:N0\}}" 
                            IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

Настройка контекста данных:

this.DataContext = new List<MyItem>() { 
    new MyItem() { Divisions = 1 },
    new MyItem() { Divisions = 2 },
    new MyItem() { Divisions = 3 },
    new MyItem() { Divisions = 4 },
    new MyItem() { Divisions = 5 }
};

Определение класса моих данных:

public class MyItem {
    public int Divisions { get; set; } 
}

Надеюсь, это поможет!

0 голосов
/ 11 сентября 2010

Я не верю, что вы правильно указываете свои строковые форматы.

В первом примере попробуйте сбросить escape-символы, например: StringFormat={}{0:N0}

Во втором: StringFormat={}{0:C}

...