C# 使用caliburn micro设置单选按钮签入代码
我在向导中有一个页面,在WPF应用程序中有4个单选按钮(2个组)。我正在使用.Net4和Caliburn Micro 单击并设置值时,它将正确绑定到相应的属性。 当我离开页面并返回时,我需要在代码中设置属性,并期望通过NotifyPropertyChanged在页面上更新这些属性。 但是没有一个单选按钮被选中,即使相应的属性被设置 有人知道卡利本怎么用吗?微型 以下是xaml:C# 使用caliburn micro设置单选按钮签入代码,c#,wpf,.net-4.0,radio-button,caliburn.micro,C#,Wpf,.net 4.0,Radio Button,Caliburn.micro,我在向导中有一个页面,在WPF应用程序中有4个单选按钮(2个组)。我正在使用.Net4和Caliburn Micro 单击并设置值时,它将正确绑定到相应的属性。 当我离开页面并返回时,我需要在代码中设置属性,并期望通过NotifyPropertyChanged在页面上更新这些属性。 但是没有一个单选按钮被选中,即使相应的属性被设置 有人知道卡利本怎么用吗?微型 以下是xaml: <RadioButton Name="NewInstallChecked" GroupName="Install
<RadioButton Name="NewInstallChecked" GroupName="InstallType" Content="New Installation (default)" Margin="75,10,0,0" />
<RadioButton Name="UpdateInstallChecked" GroupName="InstallType" Content="Update of existing Installation" Margin="75,10,0,0" />
<Label Content="Please select which version of Siseco you want to install:" Height="28" HorizontalAlignment="Left" Margin="20,20,0,0" Name="label2" VerticalAlignment="Top" />
<RadioButton Name="ServerChecked" GroupName="Version" Content="Server version (default)" Margin="75,10,0,0" />
<RadioButton Name="ClientChecked" GroupName="Version" Content="Client version" Margin="75,10,0,0" />
我没有遇到任何问题,所以我希望我能正确理解你的问题。以下是我使用的代码: 视图模型
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; }
}
}
视图
<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>
通过上面的代码,我可以设置单选按钮的值,关闭视图,然后重新打开它,同时保持单选按钮的值。希望有帮助 只是出于好奇-你有没有在没有单选按钮的情况下分组尝试过?我只是想知道“组”机制是否以某种方式干扰了绑定-从技术上讲,您应该让绑定解析初始值-您不应该在初始化时触发propertychanged事件(这是一个property
changed
事件,而不是property Initialized事件)。还可以尝试在VM的构造函数中设置选中的bool值,看看这是否会有所不同。如果改为在OnViewLoaded中设置它们,它是否仍然不起作用?很好的观点-很可能在连接视图之前触发INPC,这意味着绑定上没有任何更新,这就意味着我的建议可能没用了!:)尝试在OnViewLoaded中设置该选项。没有帮助。我也尝试了解决方案,没有设置属性,因此没有触发属性更改事件,虽然我不认为这是一个“真正的”初始化,因为它不是页面的新实例,它只是被重新激活。。。但不管怎么说,它也不是那样工作的。。。
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; }
}
}
<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>