單個控制器我很新的WPF和C#.NET初學者。我目前正在製作一個應用程序,其中有很多頁面,觸發器更改頁面是使用Kinect SDK的手勢(觸發器方法與此問題無關)。通常當創建一個WPF文件時,會有一個類似的.cs文件附加到它,它有點像一個控制器。但是,我需要多個WPF文件/頁面才能通過單個控制器.cs文件進行控制。我如何實現這一目標?謝謝你看我的問題,你的答案會是非常讚賞:)創建多頁面WPF
Q
創建多頁面WPF
0
A
回答
2
你可能想編寫一個包含您的「控制器」代碼的類,並從WPF用戶控件/頁面引用它。
在一個新的文件:
public class MyController
{
public void DoThings(object parameter)
{
// stuff you want to do
}
}
,然後你的用戶控件中的代碼隱藏類:
public partial class MyWpfControl : UserControl
{
private MyController controller;
public MyWpfControl
{
this.controller = new MyController();
}
}
最後,配合你的事件給控制器的方法:
private void OnGesture(object sender, EventArgs e)
{
// call the method on the controller, and pass whatever parameters you need...
this.controller.DoThings(e);
}
0
背後的代碼是真正的視圖的一部分,並且是不是真的類似於一個控制器和一般有壽沒有太多的代碼。通常情況下,您需要大部分邏輯在用作視圖抽象的「視圖模型」和用作UI交互業務邏輯抽象的「模型」之間。
鑑於此我想你真正想要的是一個視圖模型(VM)控制的多個視圖。這是一個相當典型的場景和首選的方法(IMO反正)是有,有一個頂層的應用模型和一個數字,你的UI中代表不同的組件子虛擬機,雖然可以綁定一切分層視圖模型您頂級虛擬機,如果你真的想。
要做到這一點,我們首先定義我們的視圖模型,像這樣
public interface IGestureSink
{
void DoGesture();
}
public class MyControlVM : INotifyPropertyChanged, IGestureSink
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private ApplicationVM parent;
public MyControlVM(ApplicationVM parent)
{
this.Name = "my user control";
this.parent = parent;
parent.PropertyChanged += (s, o) => PropertyChanged(this, new PropertyChangedEventArgs("Visible"));
}
public String Name { get; set; }
public bool Visible { get { return parent.ControlVisible; } }
public void DoGesture()
{
parent.DoGesture();
}
}
public class ApplicationVM : INotifyPropertyChanged, IGestureSink
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public ApplicationVM()
{
this.ControlVM = new MyControlVM(this);
this.ControlVisible = false;
}
public MyControlVM ControlVM { get; private set; }
public bool ControlVisible {get; set;}
public void DoGesture()
{
this.ControlVisible = !this.ControlVisible;
PropertyChanged(this, new PropertyChangedEventArgs("ControlVisible"));
}
}
,然後將所有我們需要做的是建立一個用戶控件
<UserControl x:Class="WpfApplication2.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid Background="LightBlue">
<Label Content="{Binding Name}"/>
</Grid>
</UserControl>
和頁面
<Window xmlns:my="clr-namespace:WpfApplication2" x:Class="WpfApplication2.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">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>
<Grid>
<my:MyControl Width="200" Height="200" x:Name="myUserControl" DataContext="{Binding ControlVM}" Visibility="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="222,262,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
</Window>
使用它。我們在後面的代碼中唯一需要的是一個構造函數,它可以設置頁面虛擬機並從我們的按鈕連接到視圖模型。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ApplicationVM();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
((IGestureSink)(this.DataContext)).DoGesture();
}
}
如果你想使用一個整體視圖模型,而不是你會使用這個而不是在DataContext結合ControlVM
:
<my:MyControl Width="200" Height="200" x:Name="myUserControl" DataContext="{Binding DataContext}" Visibility="{Binding ControlVisible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
相關問題
- 1. 在WPF中創建頁面或Windows
- 2. 如何在WPF中創建多頁面的UserControl?
- 3. WPF 4 FixedDocument多頁面
- 4. Crystal Reports創建多個頁面
- 5. 爲多個頁面創建xaml'模板'
- 6. 創建子頁面
- 7. 創建個別頁面或動態創建頁面?
- 8. 獲取HTML web頁面並創建WPF應用程序(C#)
- 9. 如何在WPF中爲頁面創建窗口模式?
- 10. 如何創建頁面
- 11. 動態頁面創建.aspx
- 12. 用PHP創建PDF頁面
- 13. 創建收藏夾頁面
- 14. php自動創建頁面
- 15. WordPress - 自動創建頁面
- 16. 自動創建頁面
- 17. 創建變量JSP頁面
- 18. 小工具創建頁面
- 19. ASP.NET動態創建頁面
- 20. 創建Facebook HTML頁面
- 21. 如何創建LinkedIn頁面
- 22. 創建歡迎頁面
- 23. fwrite創建新頁面
- 24. 創建「用戶頁面」
- 25. 創建Facebook粉絲頁面
- 26. 從html頁面創建pdf
- 27. 創建用戶頁面
- 28. 創建JSP信息頁面
- 29. 創建設置頁面
- 30. 無法創建新頁面
雖然,如果可能的話,該參數不應該是'object'但一些特定的類型。 – svick
@svick當然 - 及其類別和方法應適當命名的:) –
感謝您的幫助,但你的解決方案是不適用的。觸發器應該來自控制器並影響頁面,而不是相反。 – user1055010