WPF - 如何直接在 XAML 文件中设置 Bound 属性,并使用预设的固定值?

问题描述 投票:0回答:1

我想知道是否可以在 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 中进行管理,以便我可以将多个控件绑定到同一个变量,每个控件设置不同的值,但我不知道要使用哪个控件来实现此目的

提前致谢!

wpf xaml button data-binding preset
1个回答
0
投票

以下是如何实现这一点的示例:

<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>
© www.soinside.com 2019 - 2024. All rights reserved.