WPF的TextBox的DataContext不起作用

问题描述 投票:1回答:2

有一个WPF用户控件与含有的DevExpress GridControl一个DockPanel中和,以下和GridControl,文本框的外面:

<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#构造函数的用户控件,我指定GridControl和对TextBox单独的DataContext:

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

在程序执行期间,该GridControl及其成员在其指定的DataContext被更新,但简单的整数“alarmActivationDelay”没有在其指定的DataContext更新。什么我误解有关的DataContext?谢谢。

wpf data-binding
2个回答
1
投票

您还没有建立对TextBox的Text属性的绑定,就像你与网格一样。理想情况下,你应该设置窗口的DataContext的,然后使用路径=来设置每个控件绑定到在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
投票

要查看Gridcontrol的变化可以用这个

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

对于文本框,你可以简单地设置报警激活Delay.Text,但如果你要使用的DataContext,你必须实现INotifyPropertyChanged接口。您可以在此qazxsw POI看执行

© www.soinside.com 2019 - 2024. All rights reserved.