2011-11-16 8 views
11

Me parece que trabajar con botones de radio en WPF/MVVM es una experiencia un poco molesta. La respuesta "ir a" para eliminar las molestias en WPF está buscando una solución en Caliburn.Micro o en una de las recetas o implementaciones de ejemplo como CoProject. Pero no puedo encontrar ninguna implementación de una convención para radiobutton. Y tratando de hacer mi propia cuenta de lo difícil que es hacer que esto se sienta natural e intuitivo.Convención en Caliburn.Micro para botones de radio

¿Alguien sabe de una buena implementación de esta convención?

Respuesta

0

pienso así, este es un uso completo a Ti: -

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