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'.
実行時に dataTemplate によってロードされているため、最初の DependencyProperty が「Unset」であるため、これが発生することを理解しています。しかし、どうすればそれを防ぐことができますか?