- - - -编辑 - - -
所以,我想, 我的代码是正确的,那么从你的答案的代码片段 。 感谢那。 我的问题是我的dev-maschine运行.NET4.5其行为有所不同! 非常相同的程序(针对.NET4.0编译)运行在同一个.NET4.0正确maschine但不与.NET4.5一个maschine!
因此,这里是我的修订问题 。
- - - -编辑 - - -
首先,简单的例子,我怎么双向我组合框绑定到我的数据方面:
浏览模式:
public class MainWindowViewModel
{
public List<String> MyElements { get; set; }
public string SelectedElement { get; set; }
public MainWindowViewModel()
{
MyElements = new List<string>() {"a", "b", "c"};
SelectedElement = "a";
}
}
和代码隐藏
private readonly MainWindowViewModel _viewModel = new MainWindowViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = _viewModel;
}
和我的XAML
<ComboBox
ItemsSource="{Binding MyElements, Mode=OneWay}"
SelectedItem="{Binding SelectedElement}" />
这工作得很好,如果我选择蒙山组合框的项目,它被绑定到我的视图模型。
好了,现在我想我的视图模型静态但仍双向绑定selectedItem属性。 我试试这个:
public class MainWindowViewModel
{
public static List<String> MyElements { get; set; }
public static string SelectedElement { get; set; }
static MainWindowViewModel()
{
MyElements = new List<string>() {"a", "b", "c"};
SelectedElement = "a";
}
}
我并不需要设置在代码隐藏在DataContext了,我知道,那XAML需要一个实例为双向绑定,所以我还是默认的构造函数。 我然后绑定的组合框
<Window.Resources>
<me:MainWindowViewModel x:Key="model"/>
</Window.Resources>
<StackPanel>
<ComboBox
ItemsSource="{Binding Source={x:Static me:MainWindowViewModel.MyElements}, Mode=OneWay}"
SelectedItem="{Binding Source={StaticResource model}, Path=SelectedElement}" />
</StackPanel>
初始值是正确的约束,但如果我选择与组合框的另一项目它,它不会反映在我的视图模型。 我究竟做错了什么?
编辑:
如果我使用完全相同的绑定字符串文本框,并更改框中的文本,它反映在财产。
<TextBox Text="{Binding Source={StaticResource model}, Path=SelectedElement}"/>
所以,很显然我的绑定字符串是正确的,但我用的是组合框的方式似乎是错误的。 我也试图绑定SelectedValue
,而不是...没有任何变化。