我有一个使用DataTemplate的动态ListView,如下所示:
<ListView.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,0,0,1" BorderBrush="#ccc">
<RadioButton GroupName="MyRadioButtonGroup">
<StackPanel Orientation="Horizontal" Margin="0,0,0,5" Width="{Binding ActualWidth, ElementName=CheckoutGrid}">
<TextBlock Text="{Binding Path=Test1, StringFormat='{}{0} - '}" />
<TextBlock Text="{Binding Path=Test2, StringFormat='{} test {0} - '}" />
<TextBlock Text="{Binding Path=Test, StringFormat='{} test {0}'}" />
</StackPanel>
</RadioButton>
</Border>
</DataTemplate>
</ListView.ItemTemplate>我想要禁用一个按钮,直到某个RadioButton IsChecked
<RadioButton Padding="15,10" VerticalAlignment="Center">
<RadioButton.Style>
<Style TargetType="RadioButton" BasedOn="{StaticResource styleToggleButton4}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MyRadioButtonGroup, Path=IsChecked}" Value="False">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
<TextBlock FontWeight="SemiBold" FontSize="14" Margin="0">NEXT</TextBlock>
</RadioButton>所以问题是我不知道如何正确地绑定到RadioButton GroupName="MyRadioButtonGroup"。您将在上面的DataTrigger中看到我正在尝试Binding="{Binding ElementName=MyRadioButtonGroup, Path=IsChecked}" Value="False",但这对我不起作用,因为它显然是一个GroupName而不是x:Name。
对于如何正确地处理这个问题,有什么建议吗?如果可能的话,我更愿意在前端处理这个问题。
发布于 2017-07-19 06:06:28
您可以将单选按钮绑定到命令,然后使用isChecked作为参数。然后在此基础上绑定到布尔值。不过,我认为这可能只是一种变通方法。
<RadioButton
Command="{Binding MyCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}"
GroupName="radio" />
<RadioButton
Command="{Binding MyCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}"
GroupName="radio" />然后,在代码隐藏或VM中,需要实现ICommand接口和INotifyPropertyChanged
public bool IsChecked
{
get { return isChecked;}
set
{
isChecked = value;
OnPropertyChanged();
}
}
private void OnMyCommand(object obj)
{
if(obj is bool)
{
IsChecked = (bool)obj;
}
}发布于 2017-07-19 18:16:03
组没有可以绑定到的IsChecked属性。
如果您没有一个源属性来跟踪是否至少有一个选中的RadioButton,并且“希望在前端处理它”--我猜这是指在视图中--您可以编写一些代码,根据是否选择了一个RadioButton,将ListView的Tag属性设置为true/false。这是一行代码:
private void ListView_Checked(object sender, RoutedEventArgs e) => lv.Tag = true;<ListView x:Name="lv" ToggleButton.Checked="ListView_Checked">
<ListView.ItemTemplate>
...
<ListView.ItemTemplate>
</ListView>
<RadioButton Padding="15,10" VerticalAlignment="Center">
<RadioButton.Style>
<Style TargetType="RadioButton" BasedOn="{StaticResource styleToggleButton4}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=lv, Path=Tag}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
<TextBlock FontWeight="SemiBold" FontSize="14" Margin="0">NEXT</TextBlock>
</RadioButton>https://stackoverflow.com/questions/45177092
复制相似问题