You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ToolBar中ListBox的选中项绑定到SelectedLockView属性?

实现ListBox选中项与SelectedLockView属性的绑定

方案一:直接绑定SelectedItem(适用于ViewModel属性为ListBoxItem类型)

  1. ViewModel中定义属性并实现INotifyPropertyChanged
    确保你的ViewModel实现INotifyPropertyChanged接口,让属性变更能通知UI更新:

    private object _selectedLockView;
    public object SelectedLockView
    {
        get => _selectedLockView;
        set
        {
            if (_selectedLockView != value)
            {
                _selectedLockView = value;
                OnPropertyChanged(nameof(SelectedLockView));
                // 原SelectionChanged命令的逻辑可移至此处
            }
        }
    }
    
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    
  2. 修改XAML中的ListBox绑定
    给ListBox添加SelectedItem的双向绑定,推荐用绑定逻辑替代事件触发器(更符合MVVM):

    <ToolBar Style="{DynamicResource MaterialDesignToolBar}" HorizontalAlignment="Left">
        <ListBox Height="50" x:Name="ListBoxLockView" VerticalAlignment="center"
                 SelectedItem="{Binding SelectedLockView, Mode=TwoWay}">
            <!-- 若需保留原事件触发器,需避免与属性绑定逻辑冲突 -->
            <!--<Behaviors:Interaction.Triggers>
                <Behaviors:EventTrigger EventName="SelectionChanged">
                    <Behaviors:InvokeCommandAction Command="{Binding ListBoxLockView_SelectionChanged}"/>
                </Behaviors:EventTrigger>
            </Behaviors:Interaction.Triggers>-->
            <ListBoxItem x:Name="Lock" ToolTip="Vérouillage des vues">
                <materialDesign:PackIcon Kind="lock"/>
            </ListBoxItem>
            <ListBoxItem x:Name="UnLock" ToolTip="Dévérouillage des vues">
                <materialDesign:PackIcon Kind="UnlockedMinus"/>
            </ListBoxItem>
        </ListBox>
        <TextBlock Text="{Binding MsgVues}" />
    </ToolBar>
    

方案二:绑定枚举类型属性(更规范的MVVM实践)

如果希望SelectedLockView是明确的状态类型,建议使用枚举:

  1. 定义状态枚举

    public enum LockViewState
    {
        Locked,
        Unlocked
    }
    
  2. ViewModel中更新属性类型

    private LockViewState _selectedLockView;
    public LockViewState SelectedLockView
    {
        get => _selectedLockView;
        set
        {
            if (_selectedLockView != value)
            {
                _selectedLockView = value;
                OnPropertyChanged(nameof(SelectedLockView));
                // 处理状态切换逻辑,比如执行锁定/解锁视图操作
            }
        }
    }
    
  3. 修改XAML绑定配置
    给每个ListBoxItem设置Tag关联枚举值,通过SelectedValue和SelectedValuePath完成绑定:

    <ToolBar Style="{DynamicResource MaterialDesignToolBar}" HorizontalAlignment="Left">
        <ListBox Height="50" x:Name="ListBoxLockView" VerticalAlignment="center"
                 SelectedValue="{Binding SelectedLockView, Mode=TwoWay}"
                 SelectedValuePath="Tag">
            <ListBoxItem x:Name="Lock" ToolTip="Vérouillage des vues" Tag="{x:Static local:LockViewState.Locked}">
                <materialDesign:PackIcon Kind="lock"/>
            </ListBoxItem>
            <ListBoxItem x:Name="UnLock" ToolTip="Dévérouillage des vues" Tag="{x:Static local:LockViewState.Unlocked}">
                <materialDesign:PackIcon Kind="UnlockedMinus"/>
            </ListBoxItem>
        </ListBox>
        <TextBlock Text="{Binding MsgVues}" />
    </ToolBar>
    

注意事项

  • 确保ViewModel已设置为ToolBar所在容器(窗口/页面)的DataContext
  • Mode=TwoWay保证UI操作和ViewModel状态双向同步
  • 若保留原事件触发器,需避免与属性绑定的逻辑冲突

内容的提问来源于stack exchange,提问作者El doctor Sertato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:20:30