2024年03月的文章

关于ListBox的一些绑定

0 条评论 WPF ListBox 帅木

关于ListBox的一些绑定

  1. IsSelected
            <ListBox Grid.Column="1"  ItemsSource="{Binding MediaList}" SelectedIndex="0" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid Margin="5">
                            <Image Source="{Binding Thumbnail}" Width="Auto" Height="50"/>
                            <Border x:Name="selectedBorder" IsHitTestVisible="False" BorderBrush="{DynamicResource PrimaryBrush}" BorderThickness="5"/>
                        </Grid>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True">
                                <Setter TargetName="selectedBorder" Property="Visibility" Value="Visible" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="False">
                                <Setter TargetName="selectedBorder" Property="Visibility" Value="Collapsed" />
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

    通过绑定IsSelected,来显示或者隐藏当前子项的边框。


INotifyPropertyChanged 属性

0 条评论 WPF MVVM 帅木

INotifyPropertyChanged 属性

由于 C# 不允许多个继承,如果你的类已经有了其它实现,不能再继承 ObservableObject 时,可以使用 INotifyPropertyChanged,同样需要分部类,示例:

/// <summary>
/// OtherSetting.xaml 的交互逻辑
/// </summary>
[INotifyPropertyChanged]
public partial class OtherSetting : UserControl
{
    public OtherSetting()
    {
        InitializeComponent();
    }

    [ObservableProperty]
    private string? title;
    [RelayCommand]
    private void SaveSetting()
    {

    }
}

官方解释:
该 INotifyPropertyChanged 类型是一个属性,允许将 MVVM 支持代码插入现有类型。 除了其他相关属性(ObservableObject 以及 ObservableRecipient),其用途是支持开发人员,在这种情况下,需要这些类型的相同功能,但目标类型已经从另一种类型实现。 由于 C# 不允许多个继承,因此这些属性可用于让 MVVM 工具包生成器将这些代码直接添加到这些类型中,从而避开此限制。
链接:https://learn.microsoft.com/zh-cn/dotnet/communitytoolkit/mvvm/generators/inotifypropertychanged