PropertyGrid 的混合 MVVM 实现(在 DevExpress 中)
Hybrid MVVM implementation for a PropertyGrid (in DevExpress)
我需要你的帮助!以下基本上是我在 XAML 主视图中的内容:
<Button x:Name="button1" Content= "{Binding Customer1, Mode=TwoWay}" Margin="271,52,103,106" Click="button1_Click" />
主要XAML的代码隐藏(代码隐藏,因为它不是100%纯MVVM ,和一个相当混合的)是这样的:
public MainWindow()
{
InitializeComponent();
this.DataContext = new MyViewModel();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
DXDialog d = new DXDialog("Information", DialogButtons.OkCancel,true);
d.Content = new PropertyGrid();
d.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
d.Owner = this;
d.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
var result = d.ShowDialog();
if (result == true)
{
}
}
如您所见,我有一个 Button,其内容绑定到 ViewModel Class 中的字符串 属性。单击该按钮后,我将打开一个 DXDialog,其中包含一个具有 ViewModel class 属性的 PropertyGrid。让我在下面向您展示我的 ViewModel Class :
public class MyViewModel : ViewModelBase, INotifyPropertyChanged
{
Customer currentCustomer;
protected string _customer1;
public string Customer1 {
get { return this._customer1; }
set { this.SetProperty(ref this._customer1, value, "Customer1"); }
}
public MyViewModel()
{
//Customers = new ObservableCollection<Customer>();
//Customers.Add(new Customer() { Name = "Name1" });
Customer1 = "ABC";
}
}
在对话框中,我可以编辑 属性 的值,但还不知道如何以一种即使在主视图的按钮上也能立即反映出来的方式保存它{反映它必须绑定到的任何地方,我的意思是}。我可以在
后面的主要代码中看到执行到以下行
if (result == true)
{
}
但我不知道如何获取编辑后的值并将它们插入正确的位置。
基本上,我的要求是将多个控件(在本例中为按钮)绑定到 ViewModel class 的多个实例,然后,单击按钮后,我应该能够编辑那些特定的DXDialogue 的 PropertyGrid 中的 ViewModel 实例,单击 "Ok" 后,更改也应反映在相关按钮上。
-罗恩
要在 PropertyGrid 中显示 ViewModel 的属性,请将 ViewModel 分配给其 SelectedObject property,and make sure that the ShowProperties 选项设置为 All。
仅当您在主对话框和对话框中使用同一个 ViewModel 实例时,更改才会反映在绑定到 ViewModel 的按钮中 windows。
var grid = new PropertyGrid();
grid.SelectedObject = this.DataContext;
grid.ShowProperties = ShowPropertiesMode.All;
d.Content = grid;
我需要你的帮助!以下基本上是我在 XAML 主视图中的内容:
<Button x:Name="button1" Content= "{Binding Customer1, Mode=TwoWay}" Margin="271,52,103,106" Click="button1_Click" />
主要XAML的代码隐藏(代码隐藏,因为它不是100%纯MVVM ,和一个相当混合的)是这样的:
public MainWindow()
{
InitializeComponent();
this.DataContext = new MyViewModel();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
DXDialog d = new DXDialog("Information", DialogButtons.OkCancel,true);
d.Content = new PropertyGrid();
d.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
d.Owner = this;
d.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
var result = d.ShowDialog();
if (result == true)
{
}
}
如您所见,我有一个 Button,其内容绑定到 ViewModel Class 中的字符串 属性。单击该按钮后,我将打开一个 DXDialog,其中包含一个具有 ViewModel class 属性的 PropertyGrid。让我在下面向您展示我的 ViewModel Class :
public class MyViewModel : ViewModelBase, INotifyPropertyChanged
{
Customer currentCustomer;
protected string _customer1;
public string Customer1 {
get { return this._customer1; }
set { this.SetProperty(ref this._customer1, value, "Customer1"); }
}
public MyViewModel()
{
//Customers = new ObservableCollection<Customer>();
//Customers.Add(new Customer() { Name = "Name1" });
Customer1 = "ABC";
}
}
在对话框中,我可以编辑 属性 的值,但还不知道如何以一种即使在主视图的按钮上也能立即反映出来的方式保存它{反映它必须绑定到的任何地方,我的意思是}。我可以在
后面的主要代码中看到执行到以下行 if (result == true)
{
}
但我不知道如何获取编辑后的值并将它们插入正确的位置。
基本上,我的要求是将多个控件(在本例中为按钮)绑定到 ViewModel class 的多个实例,然后,单击按钮后,我应该能够编辑那些特定的DXDialogue 的 PropertyGrid 中的 ViewModel 实例,单击 "Ok" 后,更改也应反映在相关按钮上。
-罗恩
要在 PropertyGrid 中显示 ViewModel 的属性,请将 ViewModel 分配给其 SelectedObject property,and make sure that the ShowProperties 选项设置为 All。
仅当您在主对话框和对话框中使用同一个 ViewModel 实例时,更改才会反映在绑定到 ViewModel 的按钮中 windows。
var grid = new PropertyGrid();
grid.SelectedObject = this.DataContext;
grid.ShowProperties = ShowPropertiesMode.All;
d.Content = grid;