首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用INotifyPropertyChanged绑定

使用INotifyPropertyChanged绑定
EN

Stack Overflow用户
提问于 2014-11-11 18:45:51
回答 2查看 295关注 0票数 1

在我的项目中,每当出现新的出价时,我都想改变数据单元的背景。我把它设置为

代码语言:javascript
复制
public class Notifier : INotifyPropertyChanged
{
public bool BidUp
{
    get { return _bidUp; }
    set
    {
        _bidUp = value;
        OnPropertyChanged("BidUp");
    }
}
public double Bid
{
    get { return _bid; }
    set
    {
        BidUp = (value > this.Bid);
        _bid = value;
        OnPropertyChanged("Bid");
    }
}

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyName)
{
    var handler = PropertyChanged;
    if (handler != null)
        handler(this, new PropertyChangedEventArgs(propertyName));
}
}

以及DataGridCell的xaml代码:

代码语言:javascript
复制
<DataTemplate>
<Border x:Name="BidBoder" Background="AliceBlue" BorderThickness="0">
    <TextBlock Text="{Binding Bid}" x:Name="BidTextBlock" HorizontalAlignment="Right"></TextBlock>
</Border>
<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding BidUp}" Value="True">
        <DataTrigger.EnterActions>
            <StopStoryboard BeginStoryboardName="bidUpStoryboard"/>
            <StopStoryboard BeginStoryboardName="bidDownStoryboard"/>
            <BeginStoryboard Name="bidUpStoryboard">
                <Storyboard BeginTime="00:00:00">
                    <ColorAnimation 
                        BeginTime="00:00:00"
                        Duration="0:0:0.1" 
                        To="LimeGreen" 
                        AutoReverse="True"
                        Storyboard.TargetName="BidBoder" 
                        Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                    </ColorAnimation>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
    </DataTrigger>
    <DataTrigger Binding="{Binding BidUp}" Value="False">
        <DataTrigger.EnterActions>
            <StopStoryboard BeginStoryboardName="bidUpStoryboard"/>
            <StopStoryboard BeginStoryboardName="bidDownStoryboard"/>
            <BeginStoryboard Name="bidDownStoryboard">
                <Storyboard BeginTime="00:00:00">
                    <ColorAnimation 
                        BeginTime="00:00:00"
                        Duration="0:0:0.1" 
                        To="Red" 
                        AutoReverse="True"
                        Storyboard.TargetName="BidBoder" 
                        Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                    </ColorAnimation>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
    </DataTrigger>
</DataTemplate.Triggers>

现在发生的情况是,如果价格上涨,然后上涨,BidUp = true--->true,propertyChanged不会触发。是否有一种方法,即使_bidUp = value不改变,也可以调整更改?

我想问一下,如果调用了Property A = somevalue,那么如果应用相同的值,为什么不调用OnPropertyChanged呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-11 18:58:28

有两种方法可以触发同一个setter中多个属性的更新:

代码语言:javascript
复制
public double Bid
{
    get { return _bid; }
    set
    {
        BidUp = (value > this.Bid);
        _bid = value;
        OnPropertyChanged("Bid");
        OnPropertyChanged("BidUp"); // notify both properties in the same setter
    }
}

或者还没有

代码语言:javascript
复制
public double Bid
{
    get { return _bid; }
    set
    {
        BidUp = (value > this.Bid);
        _bid = value;
        OnPropertyChanged(null); // notify change of EVERY property - good if few properties in ViewModel
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-11-11 18:57:34

考虑绑定到表示实际值的属性,然后使用多绑定(即currentValue和previousValue)更新UI。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26872179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档