我的目的是添加一個文本塊到我的主UI窗口,其中的文本將根據需要進行更新。對於這一點,在我的UIWindow XAML我不喜歡這樣的:數據綁定,然後從WPF中的另一個類調用
<Window x:Class="UIDesigner.UIWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:UIDesigner"
xmlns:c="clr-namespace:UIDesigner.Controls"
WindowStartupLocation="CenterScreen"
WindowState="Maximized"
WindowStyle="SingleBorderWindow"
Title="GUI"
Height="1000" Width="1400"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Icon="Resources/Images/Logo.png"
>
<Grid Margin="0">
<Grid Grid.Row="1" Margin="0,10,0,0">
<GroupBox Header="Console" Grid.Column="1" Margin="0,590,0,0" HorizontalAlignment="Stretch" x:Name="consoleWindow" IsEnabled="True" VerticalAlignment="Stretch"
>
<TextBlock x:Name="myConsoleWindowTextBlock" Text="{Binding Path=consoleText}"/>
</GroupBox>
</Grid>
</Grid>
</Window>
這是後面的代碼:
using System.Windows;
using System.Runtime.CompilerServices;
using System.ComponentModel;
namespace UIDesigner
{
public partial class UIWindow : Window
{
public UIWindow()
{
InitializeComponent();
}
private string _consoleText;
public string consoleText
{
get{ return _consoleText;}
set
{
_consoleText = value;
NotifyPropertyChanged("consoleText");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}
然後在我的主類,我稱之爲UIWindow
這樣的:
namespace UIDesigner
{
public partial class Main : Window
{
public Main()
{
InitializeComponent();
}
private void LoginButton_Click_1(object sender, RoutedEventArgs e)
{
var myUIWindow = new UIWindow();
myUIWindow.PropertyChanged += new PropertyChangedEventHandler(UIWindow_PropertyChanged);
myUIWindow.consoleText = "Hello User!";
myUIWindow.ShowDialog();
this.Close();
}
private void LoginButton_MouseEnter_1(object sender, MouseEventArgs e)
{
}
static void UIWindow_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
MessageBox.Show("Something Changed!");
MessageBox.Show(e.PropertyName);
}
}
}
現在我在這裏有兩個問題:
第一個,當我的UI窗口開始時,我確實收到了兩個消息框,說「改變了一些東西」,然後是「consoleText」。這意味着consoleText
已成功更改。但是在我的UIWindow出現之後,textblock是空的,我看不到「Hello User!」那裏。似乎Text="{Binding Path=consoleText}
部分在我的xaml文件中無法正常工作。
其次,最重要的,我想改變consoleText
在另一個不同的階級,即DesignerCanvas.Commands.cs
。爲此,我找不出任何解決方案。我想在我的這樣的東西DesignerCanvas.Commands.cs
:
namespace UIDesigner
{
public partial class DesignerCanvas
{
private void changeConsoleOutput(string updatedConsoleText)
{
myUIWindow.consoleText = updatedConsoleText; //obviously, this is not working
}
}
}
任何類型的建議將不勝感激。
非常感謝您的回答。在你的幫助下,我解決了第一個問題,並解決了第一個問題。因爲在更改另一個類中的consoleText後,我還可以看到消息框,但textBlock沒有更新,顯示「Hello User」而不是新消息。我試圖將「this.DataContext = this」也添加到它的構造函數中。你能指出嗎?謝謝。 –
對不起,但沒有得到..哪些功能不起作用 –
在我的第二個問題中,我期待在我的文本塊中看到「updatedConsoleText」。但是當我調用「changeConsoleOutput」函數時,它會在啓動後顯示「Hello User」,而不會更新文本。 –