Свойство IsEnabled нельзя привязать к DependencyProperty и IValueConverter - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующий код:

Код XAML:

<Window x:Class="combobinding.MainWindow"
        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"
        xmlns:local="clr-namespace:combobinding"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Window.Resources>
        <local:EnumConverter x:Key="isEnabledConverter" />
    </Window.Resources>
    <Grid>
        <TextBox Text="Hello"  IsEnabled="{Binding SectionTitle, Converter={StaticResource isEnabledConverter}}" />
    </Grid>
</Window>

Код C #

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }

        public static readonly DependencyProperty SectionTitleProperty =
DependencyProperty.Register(nameof(SectionTitle),
                         typeof(SectionTitle),
                         typeof(MainWindow));

        public SectionTitle SectionTitle
        {
            get { return (SectionTitle)GetValue(SectionTitleProperty); }
            set { SetValue(SectionTitleProperty, value); }
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            SectionTitle = SectionTitle.TitleBlock;
        }
    }

    public enum SectionTitle
    {
        Normal,
        TitleBlock
    }
    public class EnumConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var sectionType = (SectionTitle)value;
            if (sectionType == SectionTitle.Normal)
                return true;
            return false;

        }

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

Я ожидаю, что EnumConverter будет вызван, когда я устанавливаю DependencyProperty SectionTitle, и любая точка останова внутри метода будет достигнута.

Однако, похоже, это не так;и свойство IsEnabled не привязывается к SectionTitle, как мне хотелось бы.

Что не так с этим кодом?

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Вам необходимо установить DataContext вашего MainWindow.Вы можете легко сделать это внутри конструктора:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }

    ...
0 голосов
/ 01 марта 2019

Определите Name свойство на Window с помощью Name="MyWindow", а затем используйте его в привязке следующим образом:

<TextBox Text="Hello" IsEnabled="{Binding ElementName=MyWindow, Path=SectionTitle, Converter={StaticResource isEnabledConverter}}" />
0 голосов
/ 01 марта 2019

Проблема в DataContext.Привязка не находит свою цель.

Вы можете установить контекст в объявлении окна.Добавьте это к тегу Window в вашем XAML:

 DataContext="{Binding RelativeSource={RelativeSource Self}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...