【问题标题】:Bool to Visibility Converter in WPFWPF中的布尔到可见性转换器
【发布时间】:2013-08-18 12:43:10
【问题描述】:

我有三个单选按钮和三个组合框,根据单选按钮的选择,组合框应该是可见的或折叠的,但这里似乎没有任何效果。我的构造函数的代码被执行,但似乎事情仍然相互重叠。

<baseControls:MaintainTemplate Style="{StaticResource {x:Type baseControls:MaintainTemplate}}" TitleText="{Binding TitleText}">

    <baseControls:MaintainTemplate.TabSection>
        <Grid>
            <GroupBox>
                <GroupBox.Header>
                    <TextBlock Text="Case Information" Style="{StaticResource TextBlockWhite}"/>
                </GroupBox.Header>
                <GroupBox.Content>
                    <Grid x:Name="GridMain">
                        <Grid.RowDefinitions>
                            <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                            <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                            <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                            <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                            <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                            <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                            <RowDefinition Style="{StaticResource MaxHeightRowDefinition}"/>
                            <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                            <ColumnDefinition Style="{StaticResource MaxWidthColumnDefinition}"/>
                            <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                        </Grid.ColumnDefinitions>
                        <Grid Grid.Column="1" x:Name="GridSelectCustomer">
                            <Grid.RowDefinitions>
                                <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                                <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                                <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                                <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Row="1" Text="Select Customer" Style="{StaticResource TextBlockWhite}"/>
                            <ComboBox Grid.Row="1" Grid.Column="2" Width="150"  ItemsSource="{Binding Customers}" 
                          DisplayMemberPath="FirstName" SelectedValue="{Binding SelectedCustomer}"/>
                            <Button Grid.Row="1"  Grid.Column="4" Content="Quick Search"/>
                            <Button Grid.Row="1" Grid.Column="6" Content="Add New Customer"/>

                            <TextBlock Grid.Row="3" Text="Reference No" Style="{StaticResource TextBlockWhite}"/>
                            <TextBox Grid.Row="3"  Grid.Column="2"/>
                            <TextBlock Grid.Row="3"  Text="Case No" Grid.Column="4" Style="{StaticResource TextBlockWhite}"/>
                            <TextBox Grid.Row="3"  Grid.Column="6" Style="{StaticResource TextBoxReadOnly}"/>
                        </Grid>
                        <GroupBox Grid.Row="2" Grid.Column="1" x:Name="GroupBoxCustomerInfo">
                            <GroupBox.Header>
                                <TextBlock Text="Customer Details" Style="{StaticResource TextBlockWhite}"></TextBlock>
                            </GroupBox.Header>
                            <GroupBox.Content>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                                        <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                                        <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                                        <RowDefinition Style="{StaticResource MinHeightRowDefinition}"/>
                                        <RowDefinition Style="{StaticResource AutoHeightRowDefinition}"/>
                                    </Grid.RowDefinitions>
                                    <TextBlock Style="{StaticResource TextBlockWhite}" Grid.Row="0" Grid.Column="1" Text="Name"/>
                                    <TextBox Style="{StaticResource TextBoxReadOnly}" Grid.Column="3"></TextBox>
                                    <TextBlock Style="{StaticResource TextBlockWhite}" Grid.Row="0" Grid.Column="5" Text="Phone No"/>
                                    <TextBox Style="{StaticResource TextBoxReadOnly}" Grid.Column="7"></TextBox>
                                    <TextBlock Style="{StaticResource TextBlockWhite}" Grid.Row="2" Grid.Column="1" Text="Father's Name"/>
                                    <TextBox Style="{StaticResource TextBoxReadOnly}"  Grid.Column="3" Grid.Row="2"></TextBox>
                                    <TextBlock Style="{StaticResource TextBlockWhite}" Grid.Row="4" Grid.Column="1"  Text="Address"/>
                                    <TextBox Style="{StaticResource TextBoxMultiLineReadOnly}" Grid.Row="4" Grid.Column="3"  ></TextBox>
                                    <TextBlock Style="{StaticResource TextBlockWhite}" Grid.Row="2" Grid.Column="5"  Text="Date Of Birth"/>
                                    <TextBox Style="{StaticResource TextBoxReadOnly}" Grid.Column="7" Grid.Row="2"></TextBox>

                                </Grid>
                            </GroupBox.Content>
                        </GroupBox>
                        <GroupBox Grid.Row="4" Grid.Column="1" x:Name="GroupBoxCaseType">
                            <GroupBox.Header>
                                <TextBlock Text="Case Type" Style="{StaticResource TextBlockWhite}"/>
                            </GroupBox.Header>
                            <GroupBox.Content>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource MaxWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource MaxWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource AutoWidthColumnDefinition}"/>
                                        <ColumnDefinition Style="{StaticResource MinWidthColumnDefinition}"/>
                                    </Grid.ColumnDefinitions>
                                    <RadioButton Grid.Column="1" x:Name="rdbMonthlyInterest"  Content="Monthly Interest" 
                                     Style="{StaticResource RadioButtonWhite}" IsChecked="{Binding IsMonthlyInterestChecked}"/>
                                    <RadioButton Grid.Column="3" x:Name="rdbDailyInstallment" Content="Daily Installment" 
                                     Style="{StaticResource RadioButtonWhite}" IsChecked="{Binding IsDailyInstallmentChecked}"/>
                                    <RadioButton Grid.Column="5" x:Name="rdbMonthlyInstallment" Content="Monthly Installment" 
                                     Style="{StaticResource RadioButtonWhite}" IsChecked="{Binding IsMonthlyInstallmentChecked}"/>
                                </Grid>
                            </GroupBox.Content>
                        </GroupBox>
                        <GroupBox Grid.Row="6" Grid.Column="1" Visibility="{Binding Path=IsMonthlyInterestChecked, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource  VisibilityConverter}}" >
                            <GroupBox.Header>
                                <TextBlock Style="{StaticResource TextBlockWhite}">Monthly Interest</TextBlock>
                            </GroupBox.Header>
                        </GroupBox>
                        <GroupBox Grid.Row="6" Grid.Column="1" Visibility="{Binding Path=IsDailyInstallmentChecked, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource  VisibilityConverter}}" >
                            <GroupBox.Header>
                                <TextBlock Style="{StaticResource TextBlockWhite}">Daily Installment</TextBlock>
                            </GroupBox.Header>
                        </GroupBox>
                        <GroupBox Grid.Row="6" Grid.Column="1" Visibility="{Binding  Path=InMonthlyInstallmentChecked, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource  VisibilityConverter}}" >
                            <GroupBox.Header>
                                <TextBlock Style="{StaticResource TextBlockWhite}">Monthly Installment</TextBlock>
                            </GroupBox.Header>
                        </GroupBox>
                    </Grid>
                </GroupBox.Content>
            </GroupBox>
        </Grid>
    </baseControls:MaintainTemplate.TabSection>
</baseControls:MaintainTemplate>

这是转换器的代码

    namespace Finance.MainUI.Common.Converters
    {
    public class BoolToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool) value ? Visibility.Visible : Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter,CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

【问题讨论】:

  • 你的转换器的代码在哪里?
  • @AndreyGordeev 我已经添加了它。请看一看。
  • Aaaa 没了....
  • 也粘贴所有Window代码
  • 您是否在 Window.Resources 中声明了资源?

标签: c# wpf binding ivalueconverter converters


【解决方案1】:

将Visibility 绑定更改为:

<GroupBox Grid.Row="7" Grid.Column="1" 
    Visibility="{Binding 
        RelativeSource={RelativeSource FindAncestor, 
            AncestorType={x:Type UserControl}}
        Path=DataContext.IsMonthlyInterestChecked, 
        UpdateSourceTrigger=PropertyChanged, 
        Converter={StaticResource  VisibilityConverter}}" >

然后将属性IsMonthlyInterestChecked 添加到您的ViewModel 并将RadioButton 绑定到它:

<RadioButton Grid.Column="0" x:Name="rdbMonthlyInterest"  
    Content="Monthly Interest" 
    Style="{StaticResource RadioButtonWhite}" 
    IsChecked="{Binding IsMonthlyInterestChecked}"/>

【讨论】:

  • 我在问题中添加了我的用户控件的完整代码。看看能不能帮上忙
  • 不,你没有。我仍然看不到您使用了哪些命名空间。为什么不能直接复制粘贴所有代码来提问?
  • 对不起,我认为这并不重要。我现在已经添加了。
  • @MegaMind 你改变你的命名空间了吗?在之前的编辑中没有提到Finance.MainUI.Common.Converters,这也是一个错误
猜你喜欢
  • 2014-03-23
  • 2019-12-18
  • 2019-01-03
  • 2011-09-24
  • 2016-06-11
  • 2012-10-10
  • 1970-01-01
  • 2012-11-23
  • 2013-06-26
相关资源
最近更新 更多