내 목적은 내 기본 UI 창에 텍스트 블록을 추가하는 것입니다. 필요한 경우 텍스트가 업데이트됩니다. 이를 위해, 내 UIWindow의 XAML에서 나는 다음과 같이했다 : 데이터 바인딩 및 WPF의 다른 클래스에서 호출
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);
}
}
}
<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>
이 뒤에 코드입니다
이제 여기에 두 가지 문제가 있습니다.
처음으로, 내 UI 창이 시작될 때 실제로 "consoleText"다음에 "변경된 내용"이라는 두 개의 메시지 상자가 나타납니다. 즉, consoleText
이 성공적으로 변경되었음을 의미합니다. 하지만 내 UIWindow가 나타나면 텍스트 블록이 비어 있으며 "Hello User!"가 표시되지 않습니다. 그곳에. Text="{Binding Path=consoleText}
부분이 내 xaml 파일에서 올바르게 작동하지 않는 것 같습니다.
두 번째로 가장 중요한 것은입니다. 다른에있는 consoleText
을 다른 클래스로 변경하고 싶습니다. 이를 위해 나는 어떤 해결책도 찾아 내지 못했습니다. 제안의 모든 종류가 많이 이해할 수있을 것이다
namespace UIDesigner
{
public partial class DesignerCanvas
{
private void changeConsoleOutput(string updatedConsoleText)
{
myUIWindow.consoleText = updatedConsoleText; //obviously, this is not working
}
}
}
: 내 DesignerCanvas.Commands.cs
이 같은 일을합니다. 두
답장을 보내 주셔서 감사합니다. 당신의 도움으로 저는 첫 번째 문제와 두 번째 문제의 절반을 해결했습니다. 다른 클래스에서 consoleText를 변경 한 후에도 메시지 상자를 볼 수 있기 때문에 textBlock이 업데이트되지 않고 "Hello User"가 표시되지만 새 메시지는 표시되지 않습니다. "this.DataContext = this"를 생성자에 추가하려고했습니다. 지적 해 주시겠습니까? 고맙습니다. –
죄송합니다. 그러나 어떤 기능이 작동하지 않습니다. –
내 두 번째 질문에서, 내 textblock에서 "updatedConsoleText"를 볼 것으로 예상했습니다.그러나 "changeConsoleOutput"함수를 호출하면 텍스트가 업데이트되지 않고 시작된 후 "Hello User"가 표시됩니다. –