2017-03-23 89 views
-1

我有一個包含wpf用戶控件的dll。如何從wpf用戶控件設置公共變量值?

我在另一個wpf項目中有一個wpf窗口,其中包含上述用戶控件。

我在wpf用戶控件中有兩個公共屬性。

我想從添加wpf用戶控件的wpf窗口中設置這些屬性。

我試圖做使用依賴屬性,如下所示:

TestUserControl.xaml: -

<UserControl x:Class="TestDependencyProperty.TestUserControl" 
      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"> 
    <Grid> 
     <Label Content="test property" x:Name="lblTestProperty"/> 
    </Grid> 
</UserControl> 

TestUserControl.xaml.cs: -

using System.ComponentModel; 
using System.Windows; 

namespace TestDependencyProperty 
{ 
    /// <summary> 
    /// Interaction logic for TestUserControl.xaml 
    /// </summary> 
    public partial class TestUserControl 
    { 
     public TestUserControl() 
     { 
      InitializeComponent(); 
      SetLabelText(); 
     } 

     private void SetLabelText() 
     { 
      lblTestProperty.Content = TestProperty; 
     } 

     public static readonly DependencyProperty TestDependencyProperty = 
      DependencyProperty.Register("TestProperty", 
       typeof(string), 
       typeof(TestUserControl)); 

     [Bindable(true)] 
     public string TestProperty 
     { 
      get 
      { 
       return (string)this.GetValue(TestDependencyProperty); 
      } 
      set 
      { 
       this.SetValue(TestDependencyProperty, value); 
      } 
     } 
    } 

MainWindow.xaml : -

<Window x:Class="TestDependencyProperty.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     xmlns:local="clr-namespace:TestDependencyProperty" 
     > 
    <Grid> 
     <local:TestUserControl x:Name="ucTest" TestProperty="HelloWorld"/> 
    </Grid> 
</Window> 

我在期待內容爲「HelloWorld」的標籤。

那麼有人可以告訴我該怎麼做嗎?

謝謝。

+1

你嘗試了什麼?你有沒有在WPF中設置過一個屬性?你上次怎麼做?你爲什麼認爲這種情況不同?你在這裏有任何具體的具體問題嗎? –

+0

你使用了依賴屬性嗎? –

+0

@Ed Plunkett感謝您的回覆,我從未嘗試過從用戶控件屬性綁定公共變量。如果您有關於此問題的任何代碼段,請轉發。謝謝。 – pankaj

回答

0

用戶控制XAML:

<UserControl x:Class="TestDependencyProperty.TestUserControl" 
      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" 
      xmlns:local="clr-namespace:WpfApplication3" 
      DataContext="{Binding RelativeSource={RelativeSource Self}}" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <Label Content="{Binding TestProperty}" x:Name="lblTestProperty"/> 
    </Grid> 
</UserControl> 

用戶控制代碼:

public partial class TestUserControl : UserControl 
    { 
     public TestUserControl() 
     { 
      InitializeComponent(); 
     } 

     public static readonly DependencyProperty TestDependencyProperty = 
      DependencyProperty.Register("TestProperty", 
       typeof(string), 
       typeof(TestUserControl)); 

     [Bindable(true)] 
     public string TestProperty 
     { 
      get 
      { 
       return (string)this.GetValue(TestDependencyProperty); 
      } 
      set 
      { 
       this.SetValue(TestDependencyProperty, value); 
      } 
     } 
} 

你不需要SetLabelText();

MyNewUserControl.TestProperty="New Value"; 

依賴屬性有變更通知內置於他們,所以一旦屬性被綁定到他們將自動獲得:

窗口主機用戶控制

<local:TestUserControl TestProperty="Test Text" x:Name="MyNewUserControl" /> 
後面如果需要

代碼當物業確實更新時更新。