2011-11-16 5 views
11

WPF/MVVMのラジオボタンで作業するのがやや面倒です。 WPFの煩わしさを解消するための "go-to"答えは、Caliburn.Microのソリューション、またはCoProjectのようなレシピまたはサンプル実装の1つを探しています。しかし、私はラジオボタンのためのコンベンションの実装を見つけることができません。そして、自分自身を作ろうとすると、これを自然で直感的に感じることがどれほど難しいのかがわかります。ラジオボタン用のCaliburn.Microでのコンベンション

このコンベンションの優れた実装について知っている人はいますか?

答えて

0

私は、これはあなたに完全に使用していると思う: -

<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; } 
    }} 
関連する問題