Aar*_*ide 14 c# wpf caliburn.micro
WPF和Caliburn.Micro的曲线相对较低.
我的目标是将组合框选定项目的绑定从后面的ShellView代码移动到视图模型,就像组合框的项目集合一样.
XAML:
<Window x:Class="EomDatabaseUtility.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Eom Tool Database Utility" Height="350" Width="525">
<Grid>
<DataGrid AutoGenerateColumns="False" Height="258" HorizontalAlignment="Left" Margin="12,41,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="479" />
<Button Content="Execute" Height="23" HorizontalAlignment="Left" Margin="416,12,0,0" VerticalAlignment="Top" Width="75" x:Name="Execute" />
<ComboBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="120" x:Name="CatalogName" SelectedValuePath="{Binding Path=SelectedCatalogName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
Code Behind(如果我理解正确的话,目标是不必添加任何代码):
namespace EomDatabaseUtility.Views
{
using System.Windows;
public partial class ShellView : Window
{
public ShellView()
{
InitializeComponent();
}
// --> This should go in the view model, Right?
private string selectedCatalogName;
public string SelectedCatalogName
{
get { return selectedCatalogName; }
set { selectedCatalogName = value; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
View Model(当前为组合框提供项目集合以及按钮事件处理程序):
namespace EomDatabaseUtility.ViewModels
{
using Caliburn.Micro;
using System.Collections.Generic;
public class ShellViewModel : PropertyChangedBase
{
public List<string> CatalogName
{
get
{
return new List<string> { "foo", "bar" };
}
}
public void Execute()
{
System.Windows.MessageBox.Show("hello");
}
}
}
Run Code Online (Sandbox Code Playgroud)
dev*_*tal 36
你可以绑定SelectedItem
的ComboBox
对您的视图模型的属性:
<ComboBox x:Name="CatalogName" ... SelectedItem="{Binding SelectedCatalog}" />
public class ShellViewModel : PropertyChangedBase
{
private string selectedCatalog;
public List<string> CatalogName
{
get
{
return new List<string> { "foo", "bar" };
}
}
public string SelectedCatalog
{
get
{
return this.selectedCatalog;
}
set
{
this.selectedCatalog = value;
this.NotifyOfPropertyChange(() => this.SelectedCatalog);
}
}
Run Code Online (Sandbox Code Playgroud)
事实上,因为你ComboBox
拥有的名称CatalogName编,该Caliburn.Micro约定将寻找一个叫做财产SelectedCatalogName
(或ActiveCatalogName
)并自动绑定ComboBox
的SelectedItem
到,所以因此你可以使用:
<ComboBox x:Name="CatalogName" ... />
public string SelectedCatalogName
{
...
}
Run Code Online (Sandbox Code Playgroud)
有几点需要注意:
NotifyOfPropertyChange()
安装员SelectedCatalog
.每当我们从视图模型设置值时,这都会通知UI该值已更改,以便UI得到更新.这种方法是其中的一部分PropertyChangedBase
.ObservableCollection
WPF或Caliburn.Micro BindableCollection
(实现Caliburn.Micro IObservableCollection
).这允许在从视图模型中添加/删除集合中的对象时通知UI.Screen
或Conductor
类型(而不是PropertyChangedBase
),如果它将具有生命周期(激活/停用等),或者将具有可在运行时更改的当前活动项(屏幕). 归档时间: |
|
查看次数: |
16162 次 |
最近记录: |