比方說,我有一個用戶控件test1.xaml,並有一個框架控件名稱frame1。在我的第二個用戶控件上,如何引用test2.xaml中的test1.xaml以便操作test2.xaml.cs中的控件屬性?因爲我知道test1 test = new test1();將不會工作,因爲我沒有實例化它,並沒有引用它。我可以問一下嗎?如何從另一個類訪問控件?
回答
好的。我不會用DependencyProperties編寫代碼,因爲它有異味。我會寫一個簡單的代碼,使用MVVM來做這樣的事情。但是我想指出的是,您必須閱讀Josh Smith撰寫的一篇文章「使用Model-View-ViewModel設計模式的WPF應用程序」。 這是一個簡單的代碼,其中包含一個主窗口和兩個用戶控件Test1和Test2。並且只有一個ViewModel - GodViewModel,它是Test1和Test2的viewModel。事實上,通常在ViewModel和View之間有1-1映射。爲了簡單起見,我只創建了一個ViewModel。
窗口代碼:
<Window x:Class="WpfApplication99.MainWindow"
x:Name="GodWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:view="clr-namespace:WpfApplication99.View"
Title="MainWindow"
xmlns:local="clr-namespace:WpfApplication99"
DataContext="{Binding Vm, ElementName=GodWindow}">
<StackPanel>
<view:Test1 />
<view:Test2 />
</StackPanel>
</Window>
public partial class MainWindow : Window
{
ViewModel.GodViewModel _vm = new ViewModel.GodViewModel();
public ViewModel.GodViewModel Vm
{
get { return _vm; }
set { _vm = value; }
}
public MainWindow()
{
InitializeComponent();
}
}
視圖模型的代碼:
namespace WpfApplication99.ViewModel
{
public class GodViewModel
{
public string Text { get; set; }
}
}
TEST1代碼(代碼後面是空的):
<UserControl x:Class="WpfApplication99.View.Test1"
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="45" d:DesignWidth="167">
<Button Content="{Binding Text}"
Height="26"
Name="button1"
Width="144" />
</UserControl>
TEST2代碼(代碼後面是空的) :
<UserControl x:Class="WpfApplication99.View.Test2"
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" >
<TextBox Text="{Binding Text}" Height="69" Width="232" />
</UserControl>
使用此代碼,您可以在Test1和Test2中使用相同的屬性Text。在你的問題中,你寫道你在test1中有一個屬性,並且想在test2中使用它。所以想象一下,提供的解決方案只是將test1的一個屬性Text放入GodViewModel中。 也許,你想在後面的代碼中使用它。在這種情況下,您應該爲test1和test2用戶控件創建單獨的ViewModel。我無法描述那裏的所有細節。所以,請閱讀文章。我確信MVVM模式是WPF中的關鍵。
您可以將YourViewModelBase類型的DependencyProperty添加到您的test2。在你創建控件實例的地方寫一些東西。當然,如果你使用MVVM。不過,據我瞭解,根據MVVM你不應該這樣做。 如果你沒有YourViewModelBase,你可以爲你的test1創建一個具有必要屬性的抽象類,或者只是將test1作爲UserControl傳遞,然後嘗試將它轉換到test2代碼中的test1。
嗨,謝謝你的回覆。你能否提供一個示例代碼來說明如何實現這個 – 2010-11-02 16:15:46
在MVVM方法中,視圖/用戶控件都可以使用與數據綁定的相同視圖模型。現在,當第一個控件引起該視圖模型公開的其中一個屬性發生值更改時,它會自動反映到第二個用戶控件中。
我不確定我是否已經使用MVVM,但是我已經根據它們的文件夾分離了這些文件。我試圖實現MVVM。 – 2010-11-02 16:16:09
- 1. 如何從另一個類訪問Winform文本框控件?
- 2. 如何從另一個類訪問ImageButton控件?
- 3. 如何從另一個類訪問notifyIcon
- 4. 如何從另一個類訪問ArrayList
- 5. 如何從另一個類訪問mainwindow?
- 6. 如何從另一個類訪問listview?
- 7. 如何從另一個類訪問textarea?
- 8. 如何從另一個類訪問getSharedPreferences?
- 9. 如何從另一個類訪問JButton
- 10. 如何訪問從另一個類
- 11. 訪問從另一個類
- 12. 從另一個類java訪問組件
- 13. 如何從自定義類中訪問另一個類/控件的屬性?
- 14. Java如何從另一個類訪問另一個ArrayList?
- 15. 如何從另一個子控件訪問父控件的子控件?
- 16. 如何從一個類訪問變量值到另一個類?
- 17. 如何從一個類訪問JTextArea到另一個類
- 18. PHP如何從另一個類訪問一個類?
- 19. c#從另一個類訪問WinForm控件屬性
- 20. 從另一個類訪問窗體控件
- 21. 如何從另一個用戶控件訪問form1上的label4?
- 22. 如何從另一個PHP腳本訪問VCL控件?
- 23. 如何從另一個線程訪問窗體控件?
- 24. 從另一個類訪問一個NSMutableArray
- 25. 從另一個類訪問類
- 26. 從另一個類訪問類變量
- 27. 從另一個控件訪問用戶控件
- 28. 從另一個onClick方法控件訪問ListView控件
- 29. 如何從vb.net的另一個類訪問網頁上的控件
- 30. 如何從另一個類或窗口訪問WPF中的控件
感謝您的時間和源代碼!我讚賞它 – 2010-11-03 17:13:51