我正在做一个简单的WPF应用程序使用MVVM和我有麻烦绑定到组合框的SelectedItem属性。 绑定属性的setter不会被调用,并且在调试窗口中没有输出告诉我它不能绑定(我认为它能够)。 这是.NET 3.5,我做了一个小例子,它有同样的问题。Combobox.SelectedItem绑定到嵌套属性
在XAML:
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<ComboBox IsDropDownOpen="False" IsReadOnly="False" ItemsSource="{Binding Path=Printers}" SelectedIndex="0" SelectedItem="{Binding Path=Printer.SelectedPrinter, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Name="cmbPrinters" />
</StackPanel>
</Window>
查看后面的代码:
using System.Windows;
public partial class Window1 : Window
{
ViewModel viewmodel;
public Window1()
{
viewmodel = new ViewModel();
this.DataContext = viewmodel;
InitializeComponent();
}
}
视图模型:
using System;
using System.Collections.ObjectModel;
public class ViewModel
{
public ViewModel()
{
Printers = new ObservableCollection<string>() { "test", "test2" };
Printer = new PrinterViewModel();
}
public PrinterViewModel Printer { get; set; }
public ObservableCollection<string> Printers { get; set; }
}
PrinterViewModel:
using System.Windows;
using System.Diagnostics;
public class PrinterViewModel : DependencyObject
{
public string SelectedPrinter
{
get { return (string)GetValue(SelectedPrinterProperty); }
set
{
SetValue(SelectedPrinterProperty, value);
Debug.WriteLine("!!!!!! SelectedPrinter setter called");
}
}
public readonly DependencyProperty SelectedPrinterProperty =
DependencyProperty.Register("SelectedPrinter", typeof(string), typeof(PrinterViewModel), new UIPropertyMetadata());
}
任何人都可以看到我在这里做错了吗?
不要混合'SelectedIndex'和'SelectedItem'。这给了麻烦。 – LPL 2012-07-20 09:22:30
好的,但没有任何效果,现在组合框显示为空,当我启动应用程序。 – 2012-07-20 09:29:23
是的,我添加了PrinterViewModel代码 – 2012-07-20 09:31:52