Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Hỏi về RelayCommand trong WPF

13:47 10-09-2021 786 lượt xem 2 bình luận

Chào anh Long, anh cho em hỏi: Em có button Thêm, nếu mà dữ liệu thêm vào trùng với CSDL thì button Thêm sẽ bị mờ, còn ngược lại sẽ nhấn được:

MainWindow.xaml:

<Window x:Class="Test_MVVM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test_MVVM"
		xmlns:Duc="clr-namespace:ViewModel;assembly=ViewModel"
		xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        mc:Ignorable="d"
		x:Name="MainW"
		WindowStartupLocation="CenterScreen"
        Title="MainWindow" Height="450" Width="800">
	<Window.DataContext>
		<Duc:DIENVIENVIEWMODEL></Duc:DIENVIENVIEWMODEL>
	</Window.DataContext>
	<StackPanel>
		<ListView x:Name="lv1" ItemsSource="{Binding Listdienvien}">
			<ListView.View>
				<GridView>
					<GridViewColumn Header="Mã diễn viên">
						<GridViewColumn.CellTemplate>
							<DataTemplate>
								<TextBlock Text="{Binding ID}"></TextBlock>
							</DataTemplate>
						</GridViewColumn.CellTemplate>
					</GridViewColumn>
					<GridViewColumn Header="Tên diễn viên">
						<GridViewColumn.CellTemplate>
							<DataTemplate>
								<TextBlock Text="{Binding TenDienVien}"></TextBlock>
							</DataTemplate>
						</GridViewColumn.CellTemplate>
					</GridViewColumn>
				</GridView>
			</ListView.View>
		</ListView>
		<TextBlock></TextBlock>
		<StackPanel>
			<TextBlock Text="Mã diễn viên"></TextBlock>
			<TextBox x:Name="txtID" Text="{Binding SelectedValue.ID, ElementName=lv1,Mode=OneWay}"></TextBox>
			<TextBlock Text="Tên diễn viên"></TextBlock>
			<TextBox x:Name="txtName" Text="{Binding SelectedValue.TenDienVien, ElementName=lv1,Mode=OneWay}"></TextBox>
		</StackPanel>
		<StackPanel Orientation="Horizontal">
			<Button Content="Thêm" Command="{Binding AddCommand}"></Button>
	    </StackPanel>
</Window>

MainWindowViewModel:

using Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace ViewModel
{
    public class MainWindowViewModel
    {
        ObservableCollection<DIENVVIEN> listdienvien;
        private string _TenDienVien;
        public string TenDienVien { get => _TenDienVien; set => _TenDienVien = value; }
        public ObservableCollection<DIENVVIEN> Listdienvien { get => listdienvien; set => listdienvien = value; }

        public DIENVIENVIEWMODEL()
        {
            Listdienvien = new ObservableCollection<DIENVVIEN>(DataProvider.Instance.Data.DIENVVIENs);
            AddCommand = new RelayCommand<object>((p) =>
            {
                ///Kiểm tra thuộc tính cần thêm khác rỗng
                if (string.IsNullOrEmpty(TenDienVien))
                {
                    return false;
                }
                //Kiểm tra thuộc tính cần thêm chưa tồn tại trong danh sách
                var dienvien = DataProvider.Instance.Data.DIENVVIENs.Where(x => x.TenDienVien == TenDienVien);
                if (dienvien == null || dienvien.Count() != 0)
                {
                    return false;
                }
                return true;
            }, (p) => { Add(p); });
        }

        public ICommand AddCommand { get; set; }


        void Add(object p)
        {
            var dienvien = new DIENVVIEN() { TenDienVien = TenDienVien };
            DataProvider.Instance.Data.DIENVVIENs.InsertOnSubmit(dienvien);
            DataProvider.Instance.Data.SubmitChanges();
            Listdienvien.Add(dienvien);
        }
    }
}

Em có debug thử thì thấy nó chỉ kiểm tra thuộc tính cần thêm khác rỗng chứ không chạy xuống dưới nữa. Xin anh và mọi người kiểm tra giúp em có chỗ nào sai không?

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Minh Sự Moderator đã bình luận 17:54 10-09-2021

Biến TenDienVien này bạn có Binding gì ngoài XAML đâu? Với lại nó cũng chưa nó OnPropertyChange nữa kìa.

Câu hỏi mới nhất