我已經設置了自己的StatusObject類來更新狀態欄。雖然在調試時似乎都會更新,但StatusBar不顯示任何文本。我感覺有些東西顯然很痛苦,但我不知道是什麼。數據綁定看起來不錯,但不確定。任何人都能發現任何東西嗎Databound StatusBarItem TextBlock不更新
查看
<Window x:Class="WpfApp3.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:WpfApp3"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid Margin="13,167,-29,156" x:Name="StatusGrid" DataContext="{Binding}">
<StatusBar x:Name="StatusBar" HorizontalAlignment="Left" Height="45" VerticalAlignment="Top" Width="497" Margin="0,0,0,-45" >
<StatusBarItem Width="171">
<TextBlock Text="{Binding Status, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="161" Height="37"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="{Binding ActiveJoist, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="314" Height="38"/>
</StatusBarItem>
</StatusBar>
</Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="13,219,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</Window>
代碼隱藏
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
namespace WpfApp3
{
public partial class MainWindow : Window
{
public class StatusObject : INotifyPropertyChanged
{
public ObservableCollection<string> Log { get; set; }
public string Status { get; set; }
public string ActiveJoist { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public StatusObject statusObject = new StatusObject();
public MainWindow()
{
InitializeComponent();
StatusGrid.DataContext = statusObject;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Create();
}
public void Create()
{
statusObject.Status = "test string";
statusObject.ActiveJoist = "test string 2";
}
}
}
編輯:不知道它的問題,但我有綁定到多個DataGrid中我查看多個DataContexts,在大約相同的確切的時尚,沒有問題。
沒有一個好的[mcve]可以可靠地重現問題,所以不可能說出你的代碼有什麼問題。我會說,綁定DataContext =「{Binding}」有點奇怪,因爲所有的操作都是將'DataContext'屬性設置爲無論如何都存在的環境數據上下文。所以如果你期望它做一些不同的事情,那可能會解釋你遇到的任何問題。解決問題,如果你想要一個真正的答案。 –
你的輸出窗口中是否有錯誤?像錯誤:40? – XAMlMAX
如果您正在主UI線程上執行任何處理,它將不會更新進度欄,直到該過程完成。如果是這種情況,你將不得不在一個單獨的線程上進行處理,並使用調度程序來更新進度條 – stuicidle