0

我使用带有图标的矩形来显示计算的状态。我定义了一个带有数据触发器和绑定“IsCompleted”的样式来处理计算的状态(完成/失败=未完成)。我现在有不止一个计算,并且想使用相同类型的矩形(都具有相同的样式和行为)进行不止一个计算。我知道通常如何为一个矩形设置 IsCompleted 的绑定。
如何在特定矩形后面的代码中设置触发器的绑定(例如,computation1.iconStyle.IsCompleted=true)?这是可能的还是我必须为每个计算定义一种样式(这将是很多额外的代码)?

xml:

<VisualBrush x:Key="NotCompleted" Stretch="Fill" Visual="{StaticResource appbar_error}" />
<VisualBrush x:Key="Completed" Stretch="Fill" Visual="{StaticResource appbar_check}" />

<Style x:Key="iconStyle" TargetType="{x:Type Rectangle}">
        <Setter Property="Width" Value="20"/>
        <Setter Property="Fill" Value="Red"/>
        <Setter Property="Height" Value="20"/>
        <Setter Property="Margin" Value="0,0,5,0"/>
        <Setter Property="OpacityMask" Value="{StaticResource NotCompleted}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsCompleted}" Value="True">
                <Setter Property="Fill" Value="Green"/>
                <Setter Property="OpacityMask" Value ="{StaticResource Completed}"/>                    
            </DataTrigger>
        </Style.Triggers>
</Style>

称呼:

<Rectangle Name="computation1"  Style="{StaticResource iconStyle}"  Grid.Column="0" VerticalAlignment="Top" />

后面的代码:

public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }

    private bool _isCompleted;
    public bool IsCompleted
    {
        get { return _isCompleted; }
        set { _isCompleted= value; NotifyPropertyChanged("IsCompleted"); }
    }

private bool comp1(){
  ....
  IsCompleted = !IsCompleted;
}

编辑:

示例输出:

组框1:
| -------------------------------------
| 计算 1:(文本块)
| 已完成或未完成的图标(矩形)
| 意思是:(文本块)
| 其他一些东西:
| -------------------------
groupbox2:
| -------------------------------------
| 计算 2:(文本块)
| 已完成或未完成的图标(矩形)
| 图表:(图片)
| 其他一些东西:
| -------------------------

4

1 回答 1

1

如果您必须可视化多个计算的状态,您应该有一个绑定到计算数据项集合的 ItemsControls。

<ItemsControl ItemsSource="{Binding Computations}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Style="{StaticResource iconStyle}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

计算项类可能如下所示:

public class Computation : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private bool isCompleted;
    public bool IsCompleted
    {
        get { return isCompleted; }
        set
        {
            isCompleted = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("IsCompleted"));
            }
        }
    }
}

并且可以像这样在您的 MainWindow 类中使用:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Computations = new ObservableCollection<Computation>();
        Computations.Add(new Computation());
        Computations.Add(new Computation());
        Computations.Add(new Computation());

        DataContext = this;

        Computations[1].IsCompleted = true;
    }

    public ObservableCollection<Computation> Computations { get; set; }
}

您可以在 MSDN 上的数据绑定概述数据模板概述文章中开始阅读所有这些内容。

于 2013-10-21T12:57:53.307 回答