我有四个视图,第一个是 a Window
,其中包含 a ComboBox
,对于我的每个项目,我ComboBox
有三种不同的类型,所以我只为每种类型的项目制作了三个不同的小视图。
我的问题是,我无法将我的文本值与主视图中的祖先当前项目绑定。当我尝试在列表/CurrentItem 上绑定时,我的程序崩溃了。
主视图中的列表:
<GroupBox Margin="5,5,10,5" Grid.Column="1" Header="MyListOfTypes" Name="MyListOfTypes">
<ListBox ItemsSource="{Binding Path=MyListOfTypes}" SelectedItem="{Binding Path=SelectedType}" />
</GroupBox>
我在小视图中的文本框:
<UserControl x:Class="Editeur.View.BaliseFixView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
mc:Ignorable="d"
d:DesignHeight="28" d:DesignWidth="240">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<Label Content="Fix :" />
<TextBox Width="170px" Grid.Column="1" Name="fixValue" Text="{Binding Source={StaticResource Locator}, Path=Balise.MyListOfTypes/}"/>
</Grid>
</UserControl>
定位器:
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<BaliseViewModel>();
}
public BaliseViewModel Balise
{
get
{
return ServiceLocator.Current.GetInstance<BaliseViewModel>();
}
}
}
解决方案
通过添加属性修复:
public string Valeur
{
get
{
return _valeur;
}
set
{
Set(() => Valeur, ref _valeur, value);
}
}
还有一个功能
public void RemplirDicoVars(XDocument document)
{
ApercuValeurs = (
from p in document.Descendants("apercu")
select new
{
Key = (string)(p.Attribute("var")),
Value = (string)(p.Attribute("value"))
}).ToDictionary(pair => pair.Key, pair => pair.Value);
}
XAML:
<TextBox Width="170px" Grid.Column="1" Name="fixValue" Text="{Binding Path=Valeur}" />