如何在绑定的列表数据更改时通知XAML属性



我使用以下代码绑定

XAML

<StackPanel x:Name="channelsRecordTimeData" Orientation="Vertical">
    <ItemsControl x:Name="channelRecordTimeItems" ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate> 
            <DataTemplate>
                <Grid x:Name="gridChannelRecordTimeItem" Width="{Binding Path=ChannelRecordTimeItemWidth}"                                                                                                                
                      Height="{Binding Path=ChannelRecordTimeItemHeight}" Margin="{Binding Path=ChannelRecordTimeItemsMargin}"
                        HorizontalAlignment="Left" DataContext="{Binding Path=ListRecordTime}">
                    <Grid.Background>
                        <ImageBrush x:Name="gridChannelRecordTimeItemBgr" ImageSource="..Resourcesplayback_grid_channel_record_time_item_bgr_normal.png"/>
                    </Grid.Background>                                    
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

C#

public class DATA
{
    public double ChannelRecordTimeItemWidth { set; get; }
    public double ChannelRecordTimeItemHeight { set; get; }
    public Thickness ChannelRecordTimeItemsMargin { set; get; }
    public List<RecordTime> ListRecordTime { set; get; }
    public DATA()
    {
        ChannelRecordTimeItemWidth = 1000;
        ChannelRecordTimeItemHeight = 20;
        ChannelRecordTimeItemsMargin = new System.Windows.Thickness(0, 0, 0, 0);
        ListRecordTime = null;
    }
}
public static List<DATA> listDATA = new List<DATA>();
for(int i = 0 ; i < 10 ; i++)
{
    DATA data = new DATA();
    listDATA.Add(data);
}
channelRecordTimeItems.ItemsSource = listDATA;
channelRecordTimeItems.Items.Refresh();

当我将代码行用作时,此代码将通知XAML更新

listDATA[0].ChannelRecordTimeItemWidth -= 15;

当我们将listDATA作为进行操作时,有任何方法可以自动更新XAML属性

listDATA.RemoveAt();
listDATA.Add();
listDATA.Clear();

不调用以下两行代码

channelRecordTimeItems.ItemsSource = listDATA;
channelRecordTimeItems.Items.Refresh();

GUI将仅在underlying source collection is implementing INotifyCollectionChanged引发CollectionChanged事件以刷新GUI组件的情况下更新。

您可以使用ObservableCollection,它在内部为您提供了此功能。

更换

public static List<DATA> listDATA = new List<DATA>();

带有

public static ObservableCollection<DATA> listDATA = new ObservableCollection<DATA>();

最新更新