WPF - 在标签中显示命令行参数
WPF - Show command-line args in a label
我有一个 wpf 应用程序需要使用多个命令行参数调用。出于这个原因,我如何在我放入 window 的标签中显示它们?
我尝试实现数据绑定,但没有成功,- 变量被正确读取和分配,但由于某些荒谬的原因没有显示在屏幕上,在我想要的标签中。
这是代码:
public partial class MainWindow : Window
{
public Notification _notif = new Notification();
public MainWindow()
{
InitializeComponent();
this.DataContext = new Notification();
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
App.Current.Shutdown();
}
}
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e){
if (e.Args.Length >= 4)
{
MainWindow mainWindow = new MainWindow();
Label count_label = (Label)mainWindow.FindName("count");
count_label.DataContext = mainWindow._notif;
System.Diagnostics.Debug.WriteLine(mainWindow._notif.count + " - notif.count");
// bind the Date to the UI
count_label.SetBinding(Label.ContentProperty, new Binding("count")
{
Source = mainWindow._notif,
Mode = BindingMode.TwoWay
});
//assigning values to the labels
System.Diagnostics.Debug.WriteLine(count_label.Content + " - content of the label 'count'");
mainWindow._notif.count = e.Args[0];
System.Diagnostics.Debug.WriteLine(e.Args[0] + " is the argument n. 0");
System.Diagnostics.Debug.WriteLine(mainWindow._notif.count + " - notif.count");
System.Diagnostics.Debug.WriteLine(count_label.Content + "-------------------");
System.Diagnostics.Debug.WriteLine(count_label.Content + " - content of the label 'count'");
mainWindow._notif.count = "1234";
System.Diagnostics.Debug.WriteLine(mainWindow._notif.count + " - notif.count");
System.Diagnostics.Debug.WriteLine(count_label.Content + " - content of the label 'count'");
}
}
}
public class Notification : INotifyPropertyChanged
{
private string _count;
public string count {
get {
return _count;
}
set {
_count = value;
OnPropertyChanged("count");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
在这里您可以看到来自 xaml 的片段:
<Label x:Name="count" Content="{Binding count}" HorizontalAlignment="Center" Margin="0,10,486,0" VerticalAlignment="Top" RenderTransformOrigin="-2.895,-0.769" Height="80" Width="145" FontFamily="Arial" FontSize="64" HorizontalContentAlignment="Center"/>
非常感谢。
该示例说明了如何在标签中显示参数。
这是应用程序的入口点:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
var argumentsInfo = BuildArgumentsInfo(e.Args);
var viewModel = new MainWindowViewModel(argumentsInfo);
var window = new MainWindow(viewModel);
window.Show();
}
private string BuildArgumentsInfo(string[] args)
{
return args.Any()
? args.Aggregate((arg1, arg2) => arg1 + " " + arg2)
: "No arguments";
}
}
这是视图模型(视图的数据上下文):
public interface IMainWindowViewModel
{
string Arguments { get; set; }
}
public class MainWindowViewModel : IMainWindowViewModel, INotifyPropertyChanged
{
private string _arguments;
public MainWindowViewModel(string argumentsInfo)
{
Arguments = argumentsInfo;
}
public string Arguments
{
get { return _arguments; }
set
{
_arguments = value;
RaisePropertyChanged("Arguments");
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate {};
private void RaisePropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
这是视图(代码隐藏):
public partial class MainWindow : Window
{
public MainWindow(IMainWindowViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
这是视图中的标签 (XAML):
<Label Content ="{Binding Arguments}"></Label>
重要! 您必须从 App.xaml 文件中删除 StartupUri="MainWindow.xaml
,因为 MainWindow
是从隐藏代码启动的。
我有一个 wpf 应用程序需要使用多个命令行参数调用。出于这个原因,我如何在我放入 window 的标签中显示它们? 我尝试实现数据绑定,但没有成功,- 变量被正确读取和分配,但由于某些荒谬的原因没有显示在屏幕上,在我想要的标签中。 这是代码:
public partial class MainWindow : Window
{
public Notification _notif = new Notification();
public MainWindow()
{
InitializeComponent();
this.DataContext = new Notification();
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
App.Current.Shutdown();
}
}
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e){
if (e.Args.Length >= 4)
{
MainWindow mainWindow = new MainWindow();
Label count_label = (Label)mainWindow.FindName("count");
count_label.DataContext = mainWindow._notif;
System.Diagnostics.Debug.WriteLine(mainWindow._notif.count + " - notif.count");
// bind the Date to the UI
count_label.SetBinding(Label.ContentProperty, new Binding("count")
{
Source = mainWindow._notif,
Mode = BindingMode.TwoWay
});
//assigning values to the labels
System.Diagnostics.Debug.WriteLine(count_label.Content + " - content of the label 'count'");
mainWindow._notif.count = e.Args[0];
System.Diagnostics.Debug.WriteLine(e.Args[0] + " is the argument n. 0");
System.Diagnostics.Debug.WriteLine(mainWindow._notif.count + " - notif.count");
System.Diagnostics.Debug.WriteLine(count_label.Content + "-------------------");
System.Diagnostics.Debug.WriteLine(count_label.Content + " - content of the label 'count'");
mainWindow._notif.count = "1234";
System.Diagnostics.Debug.WriteLine(mainWindow._notif.count + " - notif.count");
System.Diagnostics.Debug.WriteLine(count_label.Content + " - content of the label 'count'");
}
}
}
public class Notification : INotifyPropertyChanged
{
private string _count;
public string count {
get {
return _count;
}
set {
_count = value;
OnPropertyChanged("count");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
在这里您可以看到来自 xaml 的片段:
<Label x:Name="count" Content="{Binding count}" HorizontalAlignment="Center" Margin="0,10,486,0" VerticalAlignment="Top" RenderTransformOrigin="-2.895,-0.769" Height="80" Width="145" FontFamily="Arial" FontSize="64" HorizontalContentAlignment="Center"/>
非常感谢。
该示例说明了如何在标签中显示参数。
这是应用程序的入口点:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
var argumentsInfo = BuildArgumentsInfo(e.Args);
var viewModel = new MainWindowViewModel(argumentsInfo);
var window = new MainWindow(viewModel);
window.Show();
}
private string BuildArgumentsInfo(string[] args)
{
return args.Any()
? args.Aggregate((arg1, arg2) => arg1 + " " + arg2)
: "No arguments";
}
}
这是视图模型(视图的数据上下文):
public interface IMainWindowViewModel
{
string Arguments { get; set; }
}
public class MainWindowViewModel : IMainWindowViewModel, INotifyPropertyChanged
{
private string _arguments;
public MainWindowViewModel(string argumentsInfo)
{
Arguments = argumentsInfo;
}
public string Arguments
{
get { return _arguments; }
set
{
_arguments = value;
RaisePropertyChanged("Arguments");
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate {};
private void RaisePropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
这是视图(代码隐藏):
public partial class MainWindow : Window
{
public MainWindow(IMainWindowViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
这是视图中的标签 (XAML):
<Label Content ="{Binding Arguments}"></Label>
重要! 您必须从 App.xaml 文件中删除 StartupUri="MainWindow.xaml
,因为 MainWindow
是从隐藏代码启动的。