ステータスバーを更新するために自分の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";
}
}
}
編集の後ろ:それが重要かどうかわからないが、私はほぼ同じで、私のビューで複数のデータグリッドにバインドされた複数のdatacontextsを、持っています正確なファッション、問題なく。
問題を確実に再現する良い[mcve]がなければ、コードに何が問題なのかを言うことはできません。 'DataContext =" {Binding} "'をバインドするのはちょっと奇妙だと思います。なぜなら、とにかく存在するアンビエントデータコンテキストに 'DataContext'プロパティを設定しているからです。だからあなたがそれが何か違うことを期待すれば、それはあなたがどんな問題を抱えているかを説明するかもしれない。本当の答えが必要な場合は、問題を修正してください。 –
出力ウィンドウにエラーが表示されますか?エラーのように:40? – XAMlMAX
メインのUIスレッドで何らかの処理を行っている場合、プロセスが終了するまでプログレスバーが更新されません。この場合、別のスレッドで処理しなければならず、ディスパッチャを使用してプログレスバーを更新してください。 – stuicidle