簡體   English   中英

訪問WPF中的用戶控件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM