[英]Prism WPF - How to access ServiceLocator inside UserControls or Custom Controls
[英]Access to Usercontrols in WPF
我只是從WPF開始使用WinForms入手,似乎已經跌倒了第一關。
我的主要XAML定義為
<Window x:Class="FHIRCDALoader.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:FHIRCDALoader.xaml"
Title="FHIR CDA Loader" Height="350" Width="525"
Icon="Icons/color_swatch.png">
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.New"
Executed="NewDocument" />
</Window.CommandBindings>
<DockPanel>
<local:menubar DockPanel.Dock="Top"/>
<local:toolbar DockPanel.Dock="Top"/>
<local:statusbar DockPanel.Dock="Bottom" />
<RichTextBox x:Name="Body"/>
</DockPanel>
</Window>
請注意用戶控件的使用,其中之一是“狀態欄”
<UserControl x:Class="FHIRCDALoader.xaml.statusbar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StatusBar >
<StatusBarItem>
<TextBlock x:Name="bbstatusbar" />
</StatusBarItem>
</StatusBar>
</UserControl>
因此,在MainWindow.xaml.cs中,我看到可以從主XAML文件中引用名為body的RichTextBox。 但是,我無法在名為“ bbstatusbar”的UserControl中引用TextBlock。
如何從MainWindow.xaml.cs設置TextBlock的值?
與Vlad和HighCore的評論一致:您無需從MainWindow.xaml.cs設置TextBlock。 您將其綁定到視圖模型。 綁定看起來像這樣:
<TextBlock Text="{Binding StatusText}" />
上面說的是:將Text屬性綁定到當前數據上下文中名為“ StatusText”的屬性。 接下來,創建一個視圖模型:
public class ViewModel : INotifyPropertyChanged
{
public string StatusText
{
get { return _statusText; }
set
{
_statusText = value;
RaisePropertyChanged("StatusText");
}
}
// TODO implement INotifyPropertyChanged
}
最后,將MainPage的DataContext
設置為視圖模型。 您可以通過多種方式執行此操作,但是為了簡單起見,請在構造函數中執行此操作:
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel { StatusText = "hello world" };
}
現在,想法是將與模型相關的邏輯放入ViewModel
。 因此,您不需要訪問UI元素-而是更新與UI元素綁定的視圖模型屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.