Caliburn.Micro中用于单选按钮的约定

12

我发现在WPF/MVVM中使用单选按钮有点令人不爽。在WPF中消除烦恼的"标配" 答案是在Caliburn.Micro或其中一个示例实现(如CoProject)中寻找解决方案。但是我找不到任何单选按钮约定的实现方式。尝试制作自己的实现后,我意识到让它感觉自然和直观有多难。

是否有人知道这个约定的良好实现方式?


这个回答解决了你的问题吗?使用Caliburn Micro在代码中设置RadioButton选中状态 - sasha_gud
这个回答解决了你的问题吗?在代码中使用Caliburn Micro设置RadioButton的选中状态 - undefined
1个回答

2
我认为这对你有帮助:-
<UserControl x:Class="CaliburnMicroTest.Views.RadioButtonTestView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         d:DesignHeight="300"
         d:DesignWidth="300"
         mc:Ignorable="d">
<StackPanel>
    <RadioButton Name="NewInstallChecked"
                 Margin="75,10,0,0"
                 Content="New Installation (default)"
                 GroupName="InstallType" />
    <RadioButton Name="UpdateInstallChecked"
                 Margin="75,10,0,0"
                 Content="Update of existing Installation"
                 GroupName="InstallType" />
    <Label Name="label2"
           Height="28"
           Margin="20,20,0,0"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           Content="Please select which version of Siseco you want to install:" />
    <RadioButton Name="ServerChecked"
                 Margin="75,10,0,0"
                 Content="Server version (default)"
                 GroupName="Version" />
    <RadioButton Name="ClientChecked"
                 Margin="75,10,0,0"
                 Content="Client version"
                 GroupName="Version" />
    <StackPanel Margin="10" Orientation="Horizontal">
        <Button Name="SaveAndClose"
                Width="80"
                Content="Ok" />
        <Button Name="TryClose"
                Width="80"
                Content="Cancel" />
    </StackPanel>
</StackPanel></UserControl>




 public class RadioButtonTestViewModel : Screen
{
    private bool newInstallChecked;
    private bool updateInstallChecked;
    private bool serverChecked;
    private bool clientChecked;

    public bool NewInstallChecked
    {
        get { return newInstallChecked; }
        set
        {
            if (value.Equals(newInstallChecked)) return;
            newInstallChecked = value;
            NotifyOfPropertyChange(() => NewInstallChecked);
        }
    }

    public bool UpdateInstallChecked
    {
        get { return updateInstallChecked; }
        set
        {
            if (value.Equals(updateInstallChecked)) return;
            updateInstallChecked = value;
            NotifyOfPropertyChange(() => UpdateInstallChecked);
        }
    }

    public bool ServerChecked
    {
        get { return serverChecked; }
        set
        {
            if (value.Equals(serverChecked)) return;
            serverChecked = value;
            NotifyOfPropertyChange(() => ServerChecked);
        }
    }

    public bool ClientChecked
    {
        get { return clientChecked; }
        set
        {
            if (value.Equals(clientChecked)) return;
            clientChecked = value;
            NotifyOfPropertyChange(() => ClientChecked);
        }
    }

    public void SaveAndClose()
    {
        Options.Client = ClientChecked;
        Options.NewInstall = NewInstallChecked;

        Options.Server = ServerChecked;
        Options.UpdateInstall = UpdateInstallChecked;

        TryClose();
    }

    protected override void OnInitialize()
    {
        base.OnInitialize();

        ClientChecked = Options.Client;
        NewInstallChecked = Options.NewInstall;

        ServerChecked = Options.Server;
        UpdateInstallChecked = Options.UpdateInstall;
    }

    public static class Options
    {
        public static bool NewInstall { get; set; }
        public static bool UpdateInstall { get; set; }

        public static bool Server { get; set; }
        public static bool Client { get; set; }
    }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接