Связывание обновления WPF ToolKit Datagrid - PullRequest
0 голосов
/ 15 февраля 2011

В моей сетке данных у меня есть DataTrigger, определяющий, какой цвет должен быть установлен на переднем плане (текст).Это значение хранится как свойство моей страницы.

У меня все это работает хорошо, но теперь я даю пользователю возможность самостоятельно устанавливать этот цвет.

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

Пример того, что я делаю ниже (PrivateMessages отображаются другим цветом)

<DataTrigger Binding="{Binding Path=IsPrivate}" Value="True">                                    
    <Setter Property="Foreground" Value="{Binding ElementName=GridPage, Path=PrivateMessageColour}" />
</DataTrigger>

Буду признателен за любую помощь или руководство.

Заранее спасибо.

1 Ответ

0 голосов
/ 15 февраля 2011

Убедитесь, что ваш тип реализует интерфейс INotifyPropertyChanged , и вы запускаете уведомление об изменении в установщике вашего публично доступного свойства, с которым DataTrigger связывается при изменении цвета.

РЕДАКТИРОВАТЬ : Ниже приведен пример использования TextBox и Button для изменения цвета ...

C #:

public partial class Window1 : Window
{
    MyData _data = new MyData();

    public Window1()
    {
        InitializeComponent();

        this.DataContext = _data;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        _data.ChangeColor();
    }
}

    public class MyData : INotifyPropertyChanged
    {
        Random _rand = new Random();
        List<String> _colors = new List<string> { "Red", "Black", "Blue" };

        public void ChangeColor()
        {
            MyColor = _colors[_rand.Next(0, 3)];
        }

        private bool _isActive = true;
        public bool IsActive
        {
            get
            {
                return _isActive;
            }
            set
            {
                _isActive = value;
                PropertyChangedEventHandler h = PropertyChanged;
                if (h != null)
                    h(this, new PropertyChangedEventArgs("IsActive"));
            }
        }


        private String _myColor = "Green";
        public String MyColor
        {
            get
            {
                return _myColor;
            }
            set
            {
                _myColor = value;
                PropertyChangedEventHandler h = PropertyChanged;
                if (h != null)
                    h(this, new PropertyChangedEventArgs("MyColor"));
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}

XAML:

    <Grid>
        <Button Height="25" Click="Button_Click" Content="Change Color" VerticalAlignment="Bottom" />
        <TextBox Width="200" Height="100">
            <TextBox.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsActive}" Value="true">
                            <Setter Property="TextBox.Background" Value="{Binding MyColor}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
    </Grid>
...