Как изменить цвет фона текстового блока в MVVM-WPF - PullRequest
1 голос
/ 05 декабря 2011

Я новичок в технологии WPF.Я использую архитектуру MVVM.Я хочу изменить фон текстового блока на основе атрибута viewmodel.Например, если я использую объект «кисть», я хочу привязать его к цвету фона текстового блока.

<TextBlock Margin="0,1"
                    HorizontalAlignment="Center"
                    FontFamily="Arial"
                    FontSize="16"
                    Text="{Binding Line}"
                    TextWrapping="Wrap"
                    Background="{Binding brushobj}"/>

Как его реализовать?

1 Ответ

2 голосов
/ 05 декабря 2011

Вы можете определить это так внутри вашей ViewModel.

private Brush _brushobj;
/// <summary>
/// Gets or sets the BrushObject.
/// </summary>
public Brush BrushObj
{
    get
    {
        return _brushobj;
    }
    set
    {

        // Set value
        _brushobj = value;

        // Notify UI that the value has changed.
        RaisePropertyChanged("BrushObj");
        // OnPropertyChanged("BrushObj"); // Use the appropriate function to notify the UI.
    }
}

Затем просто установите значение примерно так:

BrushObj = (Brush)new BrushConverter().ConvertFromString("Green");

В последний раз вы привязываете его к своему представлению какВы сделали в своем вопросе:

Background="{Binding BrushObj}"

Редактировать: Я пытался сделать проект сам, только чтобы убедиться, что это действительно работает, и следующий код работал нормально.Если он все еще не работает, скорее всего, что-то с вашей установкой MVVM вызывает проблему.

MainWindowViewModel:

namespace WpfApplication1
{
        public class MainWindowViewModel : ObservableObject
        {
           private Brush _brushobj = (Brush)new BrushConverter().ConvertFromString("Red");
           public Brush BrushObj
           {
                get
                {
                     return _brushobj;
                }
                set
                {
                     _brushobj = value; // Set value
                     RaisePropertyChanged("BrushObj"); // Notify UI that the value has changed.
                }
           }
      }
}

MainWindow:

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <TextBlock Margin="0,1"
                        VerticalAlignment="Center"
                        HorizontalAlignment="Center"
                        FontFamily="Arial"
                        FontSize="16"
                        Text="Testing a lot of stuff here! important stuff!"
                        TextWrapping="Wrap"
                        Background="{Binding BrushObj}"/>
        </Grid>
    </Window>
...