如果在ListView中未选择任何项目,如何禁用按钮

Jon*_*han 2 c# wpf xaml user-controls listview

ListView在UserControl中有一个Contained我想在UserControl中没有选择任何项目时禁用一个按钮,这是正确的方法吗?到目前为止,它没有禁用,它只是一直保持启用状态.我已经包含了xaml代码.

searchAccountUserControl是xaml中的UserControl名称属性.AccountListView是ListViewuserControl xaml中的name属性.

<Button Content="Debit" IsEnabled="true" HorizontalAlignment="Left" Margin="18,175,0,0" Name="DebitButton" Width="128" Grid.Column="1" Height="32" VerticalAlignment="Top" Click="DebitButton_Click">
        <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=searchAccountUserControl.AccountListView, Path=SelectedValue}" Value="{x:Null}" >
                        <Setter Property="Button.IsEnabled" Value="false"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
Run Code Online (Sandbox Code Playgroud)

谢谢.

最后我用过:

在我的ViewModel中:

private bool _isSelected;
public bool IsSelected { get { return _isSelected; } 
set { _isSelected = _account.View.CurrentItem != null;       
PropertyChanged.SetPropertyAndRaiseEvent(this, ref _isSelected, value,  
ReflectionUtility.GetPropertyName(() => IsSelected)); } } 
Run Code Online (Sandbox Code Playgroud)

然后在xaml中使用isEnabled ="{Binding Path = IsSelected}".

H.B*_*.B. 21

这里有一些问题.

  1. 优先级,如果您设置IsEnabled控件本身,样式将永远无法更改它.

  2. ElementName,它是一个ElementName,而不是一个路径,只是一个字符串,它给出了一个元素的名称.除此之外的一切都进入了道路.

  3. 样式语法,如果你设置了一个Style.TargetType你不应该Setter.Property用类型前缀设置(虽然留下它不会打破setter).

顺便说一下,这就足够了:

<Button IsEnabled="{Binding SelectedItems.Count, ElementName=lv}" ...
Run Code Online (Sandbox Code Playgroud)