110,535
社区成员
发帖
与我相关
我的任务
分享
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Grid HorizontalAlignment="Left" Height="319" VerticalAlignment="Top" Width="527">
<ListBox ItemsSource="{Binding People}" SelectedItem="{Binding SelectPerson}" DisplayMemberPath="Name"
HorizontalAlignment="Left" Height="112" Margin="19,36,0,0" VerticalAlignment="Top" Width="123"/>
<Button Command="{Binding RemoveCommand}" Content="删除" HorizontalAlignment="Left" Margin="171,129,0,0"
VerticalAlignment="Top" Width="75"/>
<TextBox Text="{Binding SelectPerson.Name}" HorizontalAlignment="Left" Height="23" Margin="197,44,0,0"
TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
<TextBox Text="{Binding SelectPerson.Age}" HorizontalAlignment="Left" Height="23" Margin="196,84,0,0"
TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
<TextBlock HorizontalAlignment="Left" Margin="161,50,0,0" TextWrapping="Wrap" Text="姓名" VerticalAlignment="Top"/>
<TextBlock HorizontalAlignment="Left" Margin="161,88,0,0" TextWrapping="Wrap" Text="年龄" VerticalAlignment="Top"/>
</Grid>
class NotificationObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
class Person : NotificationObject
{
private string name;
public string Name
{
get { return name; }
set {
name = value;
OnPropertyChanged("Name");
}
}
private Nullable<int> age;
public Nullable<int> Age
{
get { return age; }
set {
age = value;
OnPropertyChanged("Age");
}
}
}
class DelegateCommand : ICommand
{
public bool CanExecute(object parameter)
{
if (CanExecuteFunc == null)
{
return true;
}
return CanExecuteFunc(parameter);
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
ExecuteAction(parameter);
}
public Action<object> ExecuteAction { get; set; }
public Func<object, bool> CanExecuteFunc { get; set; }
public DelegateCommand(Action<object> Execute, Func<object, bool> CanExecute)
{
CanExecuteChanged = (x, y) => { };
ExecuteAction = Execute;
CanExecuteFunc = CanExecute;
}
}
class MainWindowViewModel : NotificationObject
{
private ObservableCollection<Person> people;
public ObservableCollection<Person> People
{
get { return people; }
set
{
people = value;
this.OnPropertyChanged("People");
}
}
private Person selectPerson;
public Person SelectPerson
{
get { return selectPerson; }
set
{
selectPerson = value;
this.OnPropertyChanged("SelectPerson");
}
}
public DelegateCommand RemoveCommand { get; set; }
void RemoveExecute(object param)
{
People.Remove(SelectPerson);
}
bool RemoveCanExecute(object param)
{
if (SelectPerson == null)
return false;
return true;
}
public MainWindowViewModel()
{
People = new ObservableCollection<Person>()
{
new Person(){Name="张三",Age=43},
new Person(){Name="李四",Age=45},
new Person(){Name="汤姆",Age=44},
};
RemoveCommand = new DelegateCommand(RemoveExecute, RemoveCanExecute);
}
}
IsEnabled="{Binding Path=SelectedItem,ElementName=listbox,Converter={StaticResource xxx}}"
在Converter中判断,如果为null,则返回false,否则返回true
参考下吧,希望能帮到你 class DelegateCommand : ICommand
{
public bool CanExecute(object parameter)
{
if (CanExecuteFunc == null)
{
return true;
}
return CanExecuteFunc(parameter);
}
public void Execute(object parameter)
{
ExecuteAction(parameter);
}
public Action<object> ExecuteAction { get; set; }
public Func<object, bool> CanExecuteFunc { get; set; }
public DelegateCommand(Action<object> Execute, Func<object, bool> CanExecute)
{
ExecuteAction = Execute;
CanExecuteFunc = CanExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
}
你的DelegateCommand的问题,试试上面的代码。
主要是CanExecuteChanged的定义。//类名:OrderReportUploadLog
public partial class OrderReportUploadLog : ChildWindow
{
public OrderReportUploadLog()
{
InitializeComponent();
}
private void OKButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
}
还有:
bool RemoveCanExecute(object param)
{
if (SelectPerson == null)
return false;
return true;
}
改为:
private bool RemoveCanExecute(object param)
{
return true;
}