我正在使用一个小型的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侧。
为什么会发生这种情况,我该怎么做才能解决问题?
答案 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,它应该可以正常工作..