Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triể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?
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.