그래서 나는 itemsource (ObservableCollection)의 외부에있는 메소드에 바인딩하는 라디오 버튼에 대한 명령을 가지고 있습니다. 라디오 버튼을 클릭하면 오류 가 발생합니다.템플릿 외부의 메서드에 바인딩하는 명령은 어떻게 사용합니까?
오류 :
System.Windows.Data Error: 40 : BindingExpression path error: 'TaskSelectedCommand' property not found on 'object' ''Task' (HashCode=46555789)'. BindingExpression:Path=TaskSelectedCommand; DataItem='Task' (HashCode=46555789); target element is 'RadioButton' (Name=''); target property is 'Command' (type 'ICommand')
데이터 템플릿 XAML 코드 :
<Window.Resources>
<DataTemplate x:Key="Tasks">
<StackPanel>
<Grid>
<RadioButton ToolTip="Start tracker" GroupName="rdoExchange" Grid.Row="1" Grid.Column="1" Margin="2,0,10,1" Command="{Binding TaskSelectedCommand}" IsChecked="{Binding Selected}" Height="22" VerticalAlignment="Bottom"/>
<TextBox ToolTip="Task currently being tracked" IsEnabled="true" Margin="25,15,-375,4" Grid.Row="0" Grid.Column="0" Text="{Binding Name}" RenderTransformOrigin="6.033,0.727" />
<TextBox Grid.Row="0" Margin="430,15,-455,4" Grid.Column="0" Text="{Binding Time}"/>
</Grid>
</StackPanel>
</DataTemplate>
</Window.Resources>
목록 상자에 데이터 템플릿을 사용하여 :
<StackPanel Name="allTaskList" Orientation="Vertical" Margin="0,10,0,0">
<ListBox IsSynchronizedWithCurrentItem="True" Height="171" HorizontalAlignment="Left" ItemsSource="{Binding TaskList}"
HorizontalContentAlignment="Stretch" Margin="25,10,-523,0" VerticalAlignment="Top" Width="512" ItemTemplate="{StaticResource Tasks}"/>
</StackPanel>
Task.cs 코드 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace Sundial
{
public class Task
{
public int id { get; set; }
public string Name { get; set; }
public double Time { get; set; }
public bool Selected { get; set; }
}
}
MainWindowViewModel.cs 코드 :는
public ICommand TaskSelectedCommand
{
get
{
return mTaskSelected;
}
set
{
mTaskSelected = value;
}
}
public MainWindowViewModel()
{
TaskSelectedCommand = new RelayCommand(new Action<object>(TaskSelected));
TaskList = new ObservableCollection<Task>();
}
public void TaskSelected(object obj)
{
var task = TaskList.FirstOrDefault(i => i.Selected == true);
if (task != null)
{
timer.Start();
}
}
public void AddTask(object obj)
{
TaskList.Add(new Task() { id = taskNum, Name = "Task", Selected = false, Time = 0.0 });
}
이이 문제와 관련하여 단지 코드입니다, 모든 코드가 아닙니다.
이유에 대한 의견이 있으십니까? –