当孩子出错时,使UserControl父母无效

时间:2016-02-09 08:07:30

标签: c# wpf data-binding

我创建了一个用作简单文件浏览器的用户控件。我希望看到的是,当文本框出错时,完整的用户控件被设置为无效。

我认为应该可以仅使用WPF获得结果......

<UserControl x:Class="WorldGenerator.Controls.FileBrowseControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignWidth="300"
             xmlns:wg="clr-namespace:WorldGenerator.Controls"
             xmlns:v="clr-namespace:WorldGenerator.Validation">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <TextBox Grid.Column="0" Margin="0,0,10,0">
            <TextBox.Text>
                <Binding Path="FilePath">
                    <Binding.RelativeSource>
                        <RelativeSource AncestorType="wg:FileBrowseControl" Mode="FindAncestor"/>
                    </Binding.RelativeSource>
                    <Binding.ValidationRules>
                        <v:FileExistsValidationRule/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>
        <Button Grid.Column="1" Click="BrowseButton_OnClick" Content="Browse..."/>
    </Grid>
</UserControl>

修改:这是FileBrowseControlWindow的使用。

<Window>
    <FileBrowseControl/>
    <Button IsEnabled="{Binding BUT HOW DO I BIND TO FileBrowseControl.HasErrors?}"/>

</Window>

1 个答案:

答案 0 :(得分:-1)

可以将'IsEnabled'属性设置为IEnumerable.Single(); 例如,有一个名为false的UserControl。然后在textBox验证逻辑中,您可以将userControl的{​​{1}}属性设置为IsEnabled

你的xaml:

userControl

在代码隐藏中,您可以将false属性设置为<UserControl x:Class="DataGridWpfApplication.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:DataGridWpfApplication" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Name="userControl"> <Grid> </Grid> </UserControl>

IsEnabled