2011-11-16 4 views
11

WPF/MVVM'de radyo düğmesiyle çalışmayı biraz can sıkıcı bir deneyim olarak buluyorum. WPF'deki rahatsızlıkların giderilmesi için "git" yanıtı, Caliburn.Micro'da veya CoProject gibi tariflerden veya örnek uygulamalardan bir çözüm arıyor. Ancak, radyo düğmesi için bir sözleşmenin herhangi bir uygulamasını bulamıyorum. Ve kendi başıma yapmaya çalışıyorum, bunu doğal ve sezgisel hissettirmenin ne kadar zor olduğunun farkındayım.Caliburn Sözleşmesi. Radyo düğmeleri için teknik

Bu kongrenin iyi bir şekilde uygulanmasından haberi olan var mı? Ben So düşünüyorum

cevap

0

Bu Size tam kullanmaktır: -

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