WPF TextBox DataContext не работает - PullRequest
0 голосов
/ 05 февраля 2019

Иметь пользовательский элемент управления WPF с DockPanel, содержащим DevExpress GridControl и, следуя и вне GridControl, TextBox:

<UserControl x:Class="HellerOven.Setup.SetupGUI.WatlowView"
         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:resx="clr-namespace:HellerOven.Languages"
         xmlns:local="clr-namespace:HellerOven.Setup.SetupGUI"
         xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
         xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
         xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
         xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
         mc:Ignorable="d" 
         d:DesignHeight="450" d:DesignWidth="800">
<DockPanel>
    <dxg:GridControl x:Name="WatlowSensorsGrid" EnableSmartColumnsGeneration="True" DockPanel.Dock="Top" ItemsSource="{Binding}" FontSize="14" FontWeight="Medium"  Height="600" Margin="0,20,0,0">
    ...
    </dxg:GridControl>

    <TextBox Text="Alarm activation delay [seconds]" IsReadOnly="True" FontSize="14" Foreground="RoyalBlue" FontWeight="Medium" BorderThickness="0" Height="30"/>
    <TextBox Text="30" Name="alarmActivationDelay" FontSize="14" Foreground="RoyalBlue" FontWeight="Medium" BorderThickness="1" Width="100" Height="30"/>

    <Button Height="35" Width="200" Click="Add_Button_Click" HorizontalAlignment="Center" DockPanel.Dock="Bottom" Margin="0,50,0,0">
        <StackPanel Orientation="Horizontal">
            <Image Source="{dx:DXImage Image=Add_32x32.png}" Stretch="Uniform"/>
            <TextBlock Text="Add Watlow Sensor" VerticalAlignment="Center" Margin="5 0 0 0" FontSize="14"/>
        </StackPanel>
    </Button>
</DockPanel>

В конструкторе C # для UserControl, Iукажите отдельный DataContext для GridControl и для TextBox:

    public WatlowView()
    {
        InitializeComponent();
        WatlowSensorsGrid.DataContext = OvenCollections.Instance.SetupWizard.WatlowSensors;
        alarmActivationDelay.DataContext = OvenCollections.Instance.SetupWizard.alarmActivationDelay;
    }

Во время выполнения программы GridControl и его члены обновляются в назначенном им DataContext, но простое целое число "alarmActivationDelay" не обновляется в назначенном им DataContext.,Что я неправильно понимаю в отношении DataContext?Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы не настроили привязку для свойства Text TextBox, как вы это сделали с Grid.В идеале вы должны установить DataContext окна, а затем использовать Path =, чтобы установить свойство, с которым каждый элемент управления связывается в XAML.Вам также не нужно называть каждый элемент управления, если вы делаете это таким образом.Вот как должен выглядеть код:

    public WatlowView()
{
    InitializeComponent();
    this.DataContext = OvenCollections.Instance.SetupWizard;
    // No longer needed
    // WatlowSensorsGrid.DataContext = OvenCollections.Instance.SetupWizard.WatlowSensors;
    // alarmActivationDelay.DataContext = OvenCollections.Instance.SetupWizard.alarmActivationDelay;
}

Вот соответствующий XAML с привязками, установленными как для сетки, так и для текстового поля:

<DockPanel>
<dxg:GridControl x:Name="WatlowSensorsGrid" EnableSmartColumnsGeneration="True" DockPanel.Dock="Top" ItemsSource="{Binding Path=WatlowSensors}" FontSize="14" FontWeight="Medium"  Height="600" Margin="0,20,0,0">
...
</dxg:GridControl>

<TextBox Text="Alarm activation delay [seconds]" IsReadOnly="True" FontSize="14" Foreground="RoyalBlue" FontWeight="Medium" BorderThickness="0" Height="30"/>
<TextBox Text="{Binding Path=alarmActivationDelay}" Name="alarmActivationDelay" FontSize="14" Foreground="RoyalBlue" FontWeight="Medium" BorderThickness="1" Width="100" Height="30"/>

<Button Height="35" Width="200" Click="Add_Button_Click" HorizontalAlignment="Center" DockPanel.Dock="Bottom" Margin="0,50,0,0">
    <StackPanel Orientation="Horizontal">
        <Image Source="{dx:DXImage Image=Add_32x32.png}" Stretch="Uniform"/>
        <TextBlock Text="Add Watlow Sensor" VerticalAlignment="Center" Margin="5 0 0 0" FontSize="14"/>
    </StackPanel>
</Button>

0 голосов
/ 05 февраля 2019

Чтобы увидеть изменения в Gridcontrol, можно использовать это

WatlowSensorsGrid.BeginDataUpdate();
WatlowSensorsGrid.ItemsSource = OvenCollections.Instance.SetupWizard.WatlowSensors;
WatlowSensorsGrid.RefreshData();
WatlowSensorsGrid.EndDataUpdate();

Для текстового поля вы можете просто установить alarmActivationDelay.Text, но если вы хотите использовать dataContext, вы должны реализовать интерфейс INotifyPropertyChanged.Вы можете увидеть реализацию по этой ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...