在.NET Framework v4.0中,是否可以覆盖WPF RadioButton
的状态更改?
在下面的XAML中,我使用列表框来显示动态的项目数,其中一个项目被视为“选定项目”。
<ListBox Height="Auto"
Name="listBoxItems"
ItemsSource="{Binding Mode=OneWay, Path=Items}"
SelectedItem="{Binding Path=UserSelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton GroupName="SameGroup" Checked="OnItemSelected" IsChecked="{Binding Mode=TwoWay, Path=IsSelected}" CommandParameter="{Binding}"/>
<TextBlock Text="{Binding Mode=OneTime, Converter={StaticResource itemDescriptionConverter}}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
单击RadioButton时,OnItemSelected方法将进行一些验证,然后提供一个对话框,通知用户将保存新的“Selected Item”。
如果出现错误情况,或者用户取消保存,我希望重置/覆盖RadioButton状态更改。即我手动更改IsSelected属性的值。
通过调试我看到以下事件序列。
IsSelected
属性更改值,并触发NotifyPropertyEvent
IsSelected
属性的新值。OnSelected
方法,生成一个对话框。IsSelected
,重置值。这会触发多个NotifyPropertyEvents
。答案 0 :(得分:2)
我有一些代码,我清除任何单选按钮,它对我有用。检查您的代码。事件是INotifyPropertyChanged而不是通知财产。
<ListBox ItemsSource="{Binding Path=cbs}" SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<RadioButton GroupName="UserType" Content="{Binding Path=name}" IsChecked="{Binding Path=chcked, Mode=TwoWay}" Checked="RadioButton_Checked" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
public class cb: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
private bool c = false;
public bool chcked
{
get { return c; }
set
{
if (c == value) return;
c = value;
NotifyPropertyChanged("chcked");
}
}
public string name { get; private set; }
public cb(string _name) { name = _name; }
}
private void btnClickClearAll(object sender, RoutedEventArgs e)
{
foreach (cb c in cbs.Where(x => x.chcked))
{
c.chcked = false;
}
}
private void RadioButton_Checked(object sender, RoutedEventArgs e)
{
if (cbs[0].chcked) cbs[0].chcked = false;
}