我想txtLang
通过 CommandParameter 从我的 MainWindow xaml 访问(模板中存在的文本块)TextBlock。
我怎样才能做到这一点?这是代码:
主窗口:
<TreeView x:Name="TreeView" ItemTemplate="{DynamicResource TreeViewDataTemplate}" ItemsSource="{Binding PLanguageCollection}"/>
<Button CommandParameter="{Binding ElementName=TreeView,Path="SelectedItem...//What is the path?
模板:
<DataTemplate x:Key="TreeViewDataTemplate">
<StackPanel Orientation="Horizontal">
<Image Height="25" Width="25" VerticalAlignment="Center"
Source="{Binding ImagePath}"/>
<TextBlock Name="txtLang" VerticalAlignment="Center" Text="{Binding Language}" />
</StackPanel>
</DataTemplate>
编辑:
主窗口:
<Button Content="Create Project">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource MyConverter}">
<Binding Path="Text" ElementName="txtDesc"/>
<Binding Path="Text" ElementName="txtName"/>
<Binding Path="SelectedItem" ElementName="ListBox"/>
<Binding Path="SelectedItem.Language" ElementName="TreeView"/>
</MultiBinding>
</Button.CommandParameter>
</Button>
转换器:
public class MyConverter : IMultiValueConverter
{
public object Convert(object[] values)
{
Tuple<string, string> tuple = new Tuple<string, string>(
(string)values[0], (string)values[1]);
return (object)tuple;
}
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if(values[3] is string)
{
Service1 service1 = new Service1();
service1.CreateProject2((string) values[0], (string) values[1], (string) values[2], (string) values[3]);
}
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
抛出的异常:
Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.String'.
我知道发生这种情况是因为一开始的 DependencyProperty 是“未设置”,因为它是在运行时由 dataTemplate 加载的。但是我怎样才能防止它发生呢?