1

DataGridTemplateColumn に楕円があります。バインドされているデータは次の列に正しく表示されますが、楕円列は常に空で、何も表示されません。

<DataGridTemplateColumn CanUserResize="False" Header="StateEllipse">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel>
                <Ellipse Fill="{Binding Path=State, Converter={StaticResource StateToBrush}}" Width="10" Height="10" />
                <TextBlock Text="{Binding Path=State}" />
            </StackPanel>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="State" Binding="{Binding Path=State}" />

私のコンバーターは次のようになります:

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;

namespace ThisNS.NS.Converter
{
    [ValueConversion(typeof(int), typeof(Brush))]
    public sealed class StateToBrush : IValueConverter
    {

    #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Color stateColor = Colors.Yellow;
            switch ((int)value)
            {
                case 0:
                    stateColor = Colors.Green;
                    break;
                case 1:
                    stateColor = Colors.Red;
                    break;
            }
            return new SolidColorBrush(Colors.Yellow);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }

    #endregion
    }
}

State 値を表示する 2 番目の列は問題ありませんが、楕円形の最初の列は常に空です。

コンバーターが呼び出されることはないため、バインディングがバインドされることはありません。

誰かがアイデア/提案を持っていますか?

ありがとうございました。

4

2 に答える 2

1

問題を再現しようとしましたが、私の場合は問題なく動作します。下記を参照してください。

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication1="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <WpfApplication1:StateToBrush x:Key="StateToBrush"/>
</Window.Resources>
<Grid>
    <DataGrid ItemsSource="{Binding Items}" >
        <DataGrid.Columns>
            <DataGridTemplateColumn CanUserResize="False" Header="StateEllipse">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Ellipse Fill="{Binding Converter={StaticResource StateToBrush}}" Width="10" Height="10" />
                            <TextBlock FontWeight="Bold" Foreground="Blue" Text="{Binding}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="State" Binding="{Binding}" />
            <DataGridTemplateColumn CanUserResize="False" Header="StateEllipse 2">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Ellipse Fill="{Binding Converter={StaticResource StateToBrush}}" Width="10" Height="10" />
                            <TextBlock FontWeight="Bold" Foreground="Green" Text="{Binding}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        DataContext = this;
        InitializeComponent();
        Items = new ObservableCollection<int>();
        for (int i = 0; i < 100; i++)
        {
            Items.Add(i);
        }
    }

    public ObservableCollection<int> Items
    {
        get { return (ObservableCollection<int>)GetValue(ItemsProperty); }
        set { SetValue(ItemsProperty, value); }
    }

    public static readonly DependencyProperty ItemsProperty =
        DependencyProperty.Register("Items", typeof(ObservableCollection<int>), typeof(MainWindow));


}

[ValueConversion(typeof(int), typeof(Brush))]
public sealed class StateToBrush : IValueConverter
{

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Color stateColor = Colors.Yellow;
        switch ((int)value)
        {
            case 0:
                stateColor = Colors.Green;
                break;
            case 1:
                stateColor = Colors.Red;
                break;
        }
        return new SolidColorBrush(stateColor);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}
于 2012-10-27T11:03:18.287 に答える
0

楕円のサイズの設定に失敗しているように見えますか?

私が信じていることを示すには、幅と高さのプロパティを設定する必要があります...

于 2012-10-26T14:19:36.350 に答える