我想知道是否可以在 XAML 中设置 BOUND int 变量/属性,在行为类似于按钮的控件中为其提供直接写入 XAML 文件中的固定值:
从 btn1 单击设置为 1,从 btn2 单击设置为 2,...
目前我使用的唯一类似的东西是具有默认值的组合框:
<ComboBox Text="{Binding TestInt, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Content">
<ComboBoxItem IsSelected="True" Content="0"/>
<ComboBoxItem IsSelected="True" Content="1"/>
<ComboBoxItem IsSelected="True" Content="2"/>
<ComboBoxItem IsSelected="True" Content="3"/>
</ComboBox>
我尝试使用 Button 对象的“Command”,但由于 CanExecute() 任务,它看起来非常资源密集且复杂。
我希望它只能在 XAML 中进行管理,以便我可以将多个控件绑定到同一个变量,每个控件设置不同的值,但我不知道要使用哪个控件来实现此目的
提前致谢!
以下是如何实现这一点的示例:
<StackPanel>
<!-- ToggleButton 1 -->
<ToggleButton Content="Button 1"
IsChecked="{Binding IsButton1Checked, Mode=TwoWay, Converter={StaticResource BooleanToIntConverter}}"
Margin="0 5"/>
<!-- ToggleButton 2 -->
<ToggleButton Content="Button 2"
IsChecked="{Binding IsButton2Checked, Mode=TwoWay, Converter={StaticResource BooleanToIntConverter}}"
Margin="0 5"/>
<!-- ToggleButton 3 -->
<ToggleButton Content="Button 3"
IsChecked="{Binding IsButton3Checked, Mode=TwoWay, Converter={StaticResource BooleanToIntConverter}}"
Margin="0 5"/>
</StackPanel>
在您的 ViewModel 中,每个按钮都有布尔属性:
private bool _isButton1Checked;
public bool IsButton1Checked
{
get { return _isButton1Checked; }
set
{
_isButton1Checked = value;
OnPropertyChanged(nameof(IsButton1Checked));
}
}
private bool _isButton2Checked;
public bool IsButton2Checked
{
get { return _isButton2Checked; }
set
{
_isButton2Checked = value;
OnPropertyChanged(nameof(IsButton2Checked));
}
}
private bool _isButton3Checked;
public bool IsButton3Checked
{
get { return _isButton3Checked; }
set
{
_isButton3Checked = value;
OnPropertyChanged(nameof(IsButton3Checked));
}
}
您还需要一个转换器将布尔值转换为整数:
public class BooleanToIntConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool isChecked && isChecked)
return 1;
else
return 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)value == 1;
}
}
不要忘记将转换器添加到您的资源中:
<Window.Resources>
<local:BooleanToIntConverter x:Key="BooleanToIntConverter"/>
</Window.Resources>