在Caliburn.Micro的公约单选按钮

时间:2011-11-16 08:08:56

标签: wpf caliburn.micro

我发现在WPF / MVVM中使用radiobuttons是一种有点烦人的体验。 在WPF中消除烦恼的“首选”答案是在Caliburn.Micro或CoProject之类的配方或示例实现中寻找解决方案。但是我无法找到任何有关radiobutton的约定的实现。并试图让自己变得自己,我意识到让这种感觉自然而直观是多么困难。

有没有人知道这项约定的良好实施?

1 个答案:

答案 0 :(得分:1)

我认为,这对你充满了用处: -

<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; }
    }}