在C#,XAML中进行数据绑定。数据绑定元素1显示但数据绑定元素2不显示

时间:2014-07-03 06:55:49

标签: c# wpf xaml

我正在使用一个小型的WPF应用程序,我在这里大大简化了它,以说明我遇到的问题。

这是应用程序背后的代码:

namespace RadioRecordingMonitor
{

public partial class MainWindow : Window
{

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        findStationNumber();
        findRecordingFailTop();

    }

    public void findStationNumber()
    {
        var listlength = 50;
        this.DataContext = new stationAmount() { stationAmountTextData = listlength };
    }

    public void findRecordingFailTop()
    {
        var errorlenght = 20;
        this.DataContext = new errorAmount() { errorAmountTextData = errorlenght };
    }

    public class stationAmount
    {
        public int stationAmountTextData { get; set; }
    }

    public class errorAmount
    {
        public int errorAmountTextData { get; set; }
    }

}
}

以下是XAML

<Window x:Class="RadioRecordingMonitor.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Radio Recording Monitor" Width="300" Background="#ECF0EF" Height="300"
     Loaded="Window_Loaded" >
<Grid>                
    <TextBlock DataContext="{Binding}" >
        <Run Text="Total stations not recording:"/>
        <Run Text="{Binding errorAmountTextData}"/>
        <Run Text=" /"/>
        <Run Text="{Binding stationAmountTextData}"/>
    </TextBlock>
</Grid>
</Window>

我遇到的问题是任何时候只能显示一个数据绑定元素。因为它只显示 errorAmountTextData 元素,如果我删除 findRecordingFailTop(); 方法,则会显示stationAmountTextData元素,告诉我我的变量正在传递给XAML侧。

为什么会发生这种情况,我该怎么做才能解决问题?

2 个答案:

答案 0 :(得分:1)

您每次都为DataContext分配一个完全不同的类,因此每次分配时都会替换它。

相反,只需要一个班级;

public class Amounts
{
    public int stationAmountTextData { get; set; }
    public int errorAmountTextData { get; set; }
}

然后,只需将该课程分配到DataContext

即可
var myAmounts = new Amounts { stationAmountTextData = 123, errorAmountTextData = 456 };
this.DataContext = myAmounts;

答案 1 :(得分:1)

当您将datacontext更改为新的errorAmount()时,整个页面的datacontext将更改并且无法正常工作,因为在errorAmount实例中找不到errorAmountTextData。

将这两个属性保存在一个类中,并将其设置为datacontext,它应该可以正常工作..