切换组合框绑定到属性不起作用
本文关键字:属性 不起作用 绑定 组合 | 更新日期: 2023-09-27 18:17:31
我有两个组合框,当第一个被选中时,第二个应该是活动的(IsEnabled=true)。看看下面的代码片段
<UserControl x:Class="RestoreComputer.Views.ConfigView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="60"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="20,0,0,0" Height="50">
<ComboBox Name="_server" ItemsSource="{Binding Path=Servers}" SelectedItem="{Binding Path=Server}" IsSynchronizedWithCurrentItem="True" Width="100" VerticalContentAlignment="Center" Text="18"/>
<Image Source="../Images/narrow.png" Margin="10,0,10,0"/>
<ComboBox Name="_computer" IsEnabled="{Binding Path=ComputerPredicate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True">
Hello1
</ComboBox>
</StackPanel>
</Grid>
</UserControl>
正如你所看到的,我将IsEnabled属性绑定到一个像MVVM样式的属性。当_server组合框被选中时,_computer组合框应该被启用。
属性更改的代码片段。
public bool ComputerPredicate
{
get { return _computerPredicate; }
set
{
if (value != _computerPredicate)
{
_computerPredicate = value;
RaisePropertyChanged(ref _computerPredicate, value, () => ComputerPredicate);
}
}
}
public string Server
{
get { return _server; }
set
{
if (value != _server)
{
_server = value;
ComputerPredicate = true;
RaisePropertyChanged(ref _server, value, () => Server);
}
}
}
当第一个组合框被选中时,我如何启用第二个组合框?
您可以直接在XAML中这样做。如果我得到你的权利你想禁用_computer comboBox在选定的项目是null的情况下_server comboBox。
您可以通过简单的 DataTrigger
来实现:
<ComboBox x:Name="_server"/>
<ComboBox x:Name="_computer">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem,
ElementName=_server}"
Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>