Koleksiyonlar değiştiğinde kullanıcı arabirimini güncelleştirme
Bu derste kullanıcı sık kullanılan renkleri seçecektir. Kullanılabilir renkler bir açılan listede (denetim ComboBox
) listelenir. Kullanıcı bir renk seçer ve bir düğmeye basarak rengi sık kullanılanlarınıza ekler. Sık kullanılan renkler aşağıda görüntülenir. Sık kullanılan bir rengin seçilmesi, kullanıcının seçili rengi sık kullanılanlarından kaldırmasını sağlayan bir düğme de görüntüler.
İlk olarak, koleksiyondan LotsOfColors
bir renk seçme özelliğini ekleyin ve bunu sık kullanılan renkler listesine ekleyin.
1. Özelliği oluşturma SelectedColor
Kodla başlayalım ve ardından kullanıcı arabiriminde ilerleyeceğiz.
Kullanıcının açılan listede hangi öğeyi (yani sınıfın ColorDescriptor
örneğini) seçtiğini belirlemek için bir yönteme ihtiyacımız var. Denetimin ComboBox
, seçili durumdaki öğeyi alan ve ayarlayan bir SelectedItem
özelliği vardır. Bu nedenle, bu özelliği kodumuzda türündeki ColorDescriptor
bir özelliğe bağlayabiliriz.
ColorListLogic.cs dosyasını açın ve aşağıdaki kodu ekleyin:
private ColorDescriptor _selectedColor;
public ColorDescriptor SelectedColor
{
get => _selectedColor;
set => Set(ref _selectedColor, value);
}
Bu desenin şimdiye kadar tanıdık olması gerekir. Temel sınıfın INotifyPropertyChanged
yardımıyla ObservableObject
mekanizmayla dekore edilmiş standart bir özelliktir.
2. Listeyi oluşturma FavoriteColors
Liste, FavoriteColors
kullanıcının sık kullanılanları olarak seçtiği renkleri depolar. Sadece basit bir özellik.
public List<ColorDescriptor> FavoriteColors { get; } =
new List<ColorDescriptor>();
3. Seçili rengi sık kullanılanlara ekleme
Seçilen rengi sık kullanılanlara ekleme yönteminde AddSelectedColorToFavorites
gerçekleşir.
public void AddSelectedColorToFavorites()
{
FavoriteColors.Add(SelectedColor);
}
Bu yöntem çağrıldığında sık SelectedColor
kullanılanlar listesine eklenmesi gereken renkle doldurulduğu varsayımıdır.
Bu işlemle kodla işimiz bitti (şimdilik). Şimdi dikkatimizi XAML'e çevirelim.
4.ListBox
ComboBox
Bir açılan listede (denetim olan ComboBox
) renklerin tam listesinin gösterilmesini istediğimiz için XAML'yi değiştirmemiz gerekir. Neyse ki, hem hem ComboBox
de ListBox
denetimin ItemsControl
alt öğeleridir ve görünüşleri ve davranışları arasında bir fark olmasına rağmen benzer şekilde çalışırlar. Tek yapmamız gereken ColorList.xaml dosyasında ile değiştirmektir ListBox
ComboBox
. Bunun için Bul ve Değiştir>Hızlı Değiştir komutunu (CtrlL+H) kullanabilirsiniz.>
Uygulamayı şimdi hızlı bir şekilde çalıştırırsanız, öğesinin ListBox
ile ComboBox
değiştirildiğini ancak renklerin yine de aynı şablon kullanılarak görüntülendiğini görebilirsiniz.
5. Şablonu kaynağa ayıklama
Şablondan bahsetmişken, şablonu daha sonra sık kullanılan renkler listesi için yeniden kullanmanız gerekir. XAML'nizin daha okunabilir olması için şablonu yalnızca tek bir yerde depolamak iyi bir fikirdir. Daha da önemlisi, şablonda yapılan değişikliklerin her örneği etkilemesini sağlar. Şablonu bir kaynağa ayıklayalım.
Herhangi birinin FrameworkElement
kaynak listesi olabilir. Şablonumuzu bu sayfa için genel yapmayı seçtik, bu nedenle öğesinin <Grid>
üzerine bir <Page.Reources>
etiket ekleyelim. Ardından etiketin tamamını <DataTemplate>
ve içindekileri taşıyın.
<Page.Resources>
<DataTemplate x:DataType="local:ColorDescriptor">
<StackPanel Orientation="Horizontal">
<Rectangle Width="30"
Height="30">
<Rectangle.Fill>
<SolidColorBrush Color="{x:Bind Color}"/>
</Rectangle.Fill>
</Rectangle>
<TextBlock Text="{x:Bind Name}"
Margin="20, 10, 0, 10"/>
</StackPanel>
</DataTemplate>
</Page.Resources>
Visual Studio, etiket içindeki <Page.Resources>
nesnelerin (bir ) IDictionary
özniteliği Key
olması gerektiği konusunda sizi uyarır, bu nedenle bunu öğesine <DataTemplate>
ekleyin.
<DataTemplate x:Key="ColorTemplate"
x:DataType="local:ColorDescriptor">
Bu anahtar, ComboBox.ItemTemplate
içeriğini kaybeden gibi sayfanın başka bir yerinden bu şablona başvurmamıza olanak tanır. ComboBox
Kaynağı kullanmak ColorDescriptor
için etiketi kaldırabilir ve etiketin <ComboBox.ItemTemplate>
içinde <ComboBox>
bir öznitelik olarak kullanabilirsiniz. Etiketin tamamı <ComboBox>
şöyle görünür:
<ComboBox ItemsSource="{x:Bind Logic.LotsOfColors}"
Margin="20"
Width="200"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemTemplate="{StaticResource ColorTemplate}"/>
Öğe şablonunun çalıştığını doğrulamak için uygulamayı yeniden çalıştırabilirsiniz.
6. Kullanıcı arabiriminin geri kalanını derleme
Kullanıcı arabirimi basittir. Tüm denetimler (açılan liste, Sık Kullanılanlara Ekle düğmesi, sık kullanılanlar listesi (üst bilgi metniyle) ve Sık Kullanılanlardan Kaldır düğmesi) tek bir dikey StackPanel
içine yerleştirilir. öğesinin tüm içeriğini <Grid>
aşağıdakilerle değiştirin:
<StackPanel>
<ComboBox ItemsSource="{x:Bind Logic.LotsOfColors}"
Margin="20, 20, 20, 0"
Width="200"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemTemplate="{StaticResource ColorTemplate}"
SelectedItem="{x:Bind Logic.SelectedColor, Mode=TwoWay}"
/>
<Button Margin="20"
Click="{x:Bind Logic.AddSelectedColorToFavorites}">Add to Favorites</Button>
<TextBlock FontSize="25"
Margin="20, 20, 20, 0">Favorite colors</TextBlock>
<ListBox ItemsSource="{x:Bind Logic.FavoriteColors}"
ItemTemplate="{StaticResource ColorTemplate}"
Margin="20, 20, 20, 0"/>
<Button Margin="20">Remove from Favorites</Button>
</StackPanel>
içinde seçili durumdaki öğe ComboBox
ile SelectedColor
sınıfının özelliği ColorListLogic
arasında bir TwoWay
bağlama vardır.
7. Uygulamayı çalıştırma
Uygulamayı şimdi çalıştırın, içinden ComboBox
bir renk seçin ve Sık Kullanılanlara Ekle düğmesini seçin. Hiçbir şey olmaz. sınıfındaki yöntemin AddSelectedColorToFavorites
ColorListLogic
sonuna bir kesme noktası eklemek, kodun çalıştığını gösterir. Seçilen renk listeye eklenir FavoriteColors
.
Kullanıcı arabiriminin bu List<ColorDescriptor>
içindeki değişiklikleri yansıtmama nedeni, koleksiyon değiştiğinde kullanıcı arabiriminin bilgilendirilmesi gerektiğidir. Listeler için bu işlem arabirim üzerinden System.Collections.Specialized.INotifyCollectionChanged
yapılır. Neyse ki bunu uygulamamız gerekmiyor. Sınıfta System.Collections.ObjectModel.ObservableCollection<T>
ihtiyacımız olan her şey zaten var.
Uygulamamızın çalışmasını sağlamak için tek yapmamız gereken özelliği için FavoriteColors
sınıfı yerine List<T>
sınıfını kullanmaktırObservableCollection<T>
.
public ObservableCollection<ColorDescriptor> FavoriteColors { get; } =
new ObservableCollection<ColorDescriptor>();
Uygulamayı şimdi çalıştırıyorsanız, açılan listeden renkleri seçip Sık Kullanılanlara Ekle düğmesini seçmek artık düzgün çalışıyor. Seçilen sık kullanılan renkler öğesine ListBox
yansıtılır. Güzel!
8. Boş öğeler eklemekten kaçının
Uygulamayı başlattığınızda, açılan listede seçili renk yoktur. Sık Kullanılanlara Ekle düğmesini şimdi seçerseniz, null
bunlar listeye eklenir. Bu bir hata, bu yüzden düzeltelim!
Yöntemine AddSelectedColorToFavorites
bir null
denetim ekleyebiliriz, ancak bu, sık kullanılanlara ekle düğmesinin işlevsel olmadığında gösterilmesini engellemez. Bunun yerine, açılan listede her zaman bir öğe seçildiğinden emin olalım. Açılan listenin SelectedItem
özelliği koddaki özelliğe iki yönlü bağlı SelectedColor
olduğundan, bunu başlangıçta geçerli bir değere başlatalım. Oluşturucunun sonuna ColorListLogic
aşağıdaki satırı ekleyin:
SelectedColor = LotsOfColors[0];
Bu, uygulama başlatıldığında listenin ilk öğesinin LotsOfColors
seçilmesini sağlar. Kullanıcı koleksiyona bir null
FavoriteColors
ekleyemez.
9. Sık kullanılan renkleri kaldırma
Sonraki adım, sık kullanılan renkleri 'den kaldırma özelliğini eklemektir ListBox
. Bu, kullanıcının içinde ListBox
bir öğe seçip Sık Kullanılanlardan Kaldır düğmesini seçmesi ile gerçekleşir.
Çalışma şekline ComboBox
benzer şekilde, kullanıcının özelliği aracılığıyla SelectedItem
içinde seçtiği öğeyi ListBox
izleyebiliriz. Bunu koddaki bir özelliğe bağlayabiliriz. Bunu sınıfına ColorListLogic
ekleyin.
private ColorDescriptor _selectedFavoriteColor;
public ColorDescriptor SelectedFavoriteColor
{
get => _selectedFavoriteColor;
set
{
Set(ref _selectedFavoriteColor, value);
RaisePropertyChanged(nameof(IsRemoveFavoriteColorButtonVisible));
}
}
public bool IsRemoveFavoriteColorButtonVisible => SelectedFavoriteColor != null;
Yukarıdaki kod, sık kullanılanlar listesinden öğe kaldırma düğmesinin görünür olup olmayacağını denetlemek için bir Boole özelliği de içerir. herhangi bir değişiklik SelectedFavoriteColor
, kullanıcı arabiriminin bu özelliği sorgulamasına ve buna göre davranmasına neden olur.
Rengin sık kullanılanlar listesinden kaldırılmasını gerçekleştirmek için bir yöntem daha yazmamız gerekir.
public void RemoveFavoriteColor()
{
FavoriteColors.Remove(SelectedFavoriteColor);
}
Düğmeyi XAML'de yukarı çevirmek için ColorList.xaml dosyasını açın ve Sık Kullanılanlardan Kaldır düğmesinin XAML'sini değiştirin. Bağlamanın yanı sıra bağlamayı Visibility
da içereceği şekilde Click
değiştirin.
<Button Margin="20"
Visibility="{x:Bind Logic.IsRemoveFavoriteColorButtonVisible, Mode=OneWay}"
Click="{x:Bind Logic.RemoveFavoriteColor}">Remove from Favorites</Button>
Geriye kalan tek şey , 'SelectedItem
leri ListBox
özelliğine Logic.SelectedFavoriteColor
bağlamaktır. özniteliğini SelectedItem
XAML'ye ListBox
ekleyin.
<ListBox SelectedItem="{x:Bind Logic.SelectedFavoriteColor, Mode=TwoWay}"... >
Uygulamayı şimdi çalıştırın ve sık kullanılan renklerin listesine renk ekleyebildiğinizi ve bunları kaldırabildiğinizi doğrulayın. Sık Kullanılanlardan Kaldır düğmesinin, kaldırılabilir bir sık kullanılan rengi seçili olup olmadığına göre nasıl göründüğüne ve kaybolduğuna dikkat edin.
Özet
Bu derste, özelliklerini bir ComboBox
ListBox
C# özelliğine bağlayarak SelectedItem
veya denetiminde seçili öğeyi nasıl edinebileceğiniz ve ayarlayabileceğiniz gösterilmiştir. Kodda kullanmanın ObservableCollection
kullanıcı arabiriminin birden çok öğe görüntüleyen denetimlerin içeriğini otomatik olarak güncelleştirmesine nasıl neden olduğunu da gördünüz.
Bu derste kullanıcı en sevdiği renkleri seçecektir. Kullanılabilir renkler bir açılan listede (denetim ComboBox
) listelenir. Kullanıcı bir renk seçer ve bir düğmeye basarak rengi sık kullanılanlara ekler. Sık kullanılan renkler tam listenin altında görüntülenir. Sık kullanılan bir rengin seçilmesi, kullanıcının seçili rengi sık kullanılanlarından kaldırmasını sağlayan bir düğme de görüntüler.
İlk olarak, koleksiyondan LotsOfColors
bir renk seçme özelliğini ekleyeceğiz ve bunu sık kullanılan renkler listesine ekleyeceğiz.
1. Özelliği oluşturma SelectedColor
Kodla başlayalım ve ardından kullanıcı arabirimi değişikliklerinde ilerleyeceğiz.
Kullanıcının açılan listede hangi öğeyi (yani sınıfın ColorDescriptor
örneğini) seçtiğini belirlemek için bir yönteme ihtiyacımız var. Denetimin ComboBox
, seçili durumdaki öğeyi alan ve ayarlayan bir SelectedItem
özelliği vardır. Bu nedenle, bu özelliği kodumuzda türündeki ColorDescriptor
bir özelliğe bağlayabiliriz.
Aşağıdaki kodu açın ColorListDataContext.cs
ve ekleyin:
private ColorDescriptor? _selectedColor;
public ColorDescriptor? SelectedColor
{
get => _selectedColor;
set => Set(ref _selectedColor, value);
}
Bu desenin şimdiye kadar tanıdık olması gerekir. Temel sınıfın yardımıyla ObservableObject
mekanizmadan INotifyPropertyChanged
yararlanan standart bir özelliktir.
2. Listeyi oluşturma FavoriteColors
Liste, FavoriteColors
kullanıcının sık kullanılanları olarak seçtiği renkleri depolar. Sadece basit bir özellik.
public List<ColorDescriptor> FavoriteColors { get; } =
new List<ColorDescriptor>();
3. Seçili rengi sık kullanılanlara ekleme
Seçilen rengi sık kullanılanlara ekleme yönteminde AddSelectedColorToFavorites
gerçekleşir. Önlem olarak özelliğinin SelectedColor
olup null
olmadığını denetleyin. Bu durumda yönteminden geri dönün. Aksi takdirde, seçilen rengi FavoriteColors
listeye ekleyin.
public void AddSelectedColorToFavorites()
{
if (SelectedColor == null) return;
FavoriteColors.Add(SelectedColor);
}
Bu yöntem çağrıldığında, SelectedColor
sık kullanılanlar listesine eklenen renkle doldurulmalıdır, ancak varsayımlarda bulunmamak en iyisidir.
Bu işlemle kodla işimiz bitti (şimdilik). Şimdi dikkatimizi XAML'e çevirelim.
4.ListBox
ComboBox
Bir açılan listede (denetim olan ComboBox
) renklerin tam listesinin gösterilmesini istediğimiz için XAML'yi değiştirmemiz gerekir. Neyse ki, hem hem ComboBox
de ListBox
denetimin ItemsControl
alt öğeleridir ve görünüş ve davranışlarında çok sayıda farklılık olmasına rağmen benzer şekilde çalışırlar. Tek yapmamız gereken dosyadaki ColorList.xaml
ile ComboBox
değiştirmekListBox
. Bunun için Bul ve Değiştir>Hızlı Değiştir komutunu (CtrlL+H) kullanabilirsiniz.>
Uygulamayı şimdi hızlı bir şekilde çalıştırırsanız, öğesinin ListBox
ile ComboBox
değiştirildiğini ancak renklerin yine de aynı şablon kullanılarak görüntülendiğini görebilirsiniz.
5. Şablonu kaynağa ayıklama
Şablondan bahsetmişken, şablonu daha sonra sık kullanılan renkler listesi için yeniden kullanmanız gerekir. XAML'nizin daha okunabilir olması için şablonu yalnızca tek bir yerde depolamak iyi bir fikirdir. Daha da önemlisi, şablonda yapılan değişikliklerin her örneği etkilemesini sağlar. Şablonu bir kaynağa ayıklayalım.
Herhangi birinin FrameworkElement
kaynak listesi olabilir. Şablonumuzun tamamı Window
için genel olmasını seçtik, bu nedenle öğesinin <Grid>
üzerine bir <Window.Reources>
etiket ekleyelim. Ardından etiketin tamamını <DataTemplate>
ve içindekileri taşıyın.
<Window.Resources>
<DataTemplate x:Key="ColorTemplate">
<StackPanel Orientation="Horizontal">
<Rectangle Width="80"
Height="20">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}"/>
</Rectangle.Fill>
</Rectangle>
<TextBlock Text="{Binding Name}"
Margin="20, 10, 0, 10"/>
</StackPanel>
</DataTemplate>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
<Window.Resources>
bir sözlük olduğundan her girişin de bir anahtarı olmalıdır. öğesine ekledik <DataTemplate>
.
<DataTemplate x:Key="ColorTemplate">
Bu anahtar, içeriğini kaybeden gibi içinde Window
ComboBox.ItemTemplate
başka bir yerden bu şablona başvurmamıza olanak tanır. ComboBox
Kaynağı kullanmak ColorDescriptor
için etiketi kaldırabilir ve etiketin <ComboBox.ItemTemplate>
içinde <ComboBox>
bir öznitelik olarak kullanabilirsiniz. Etiketin tamamı <ComboBox>
şöyle görünür:
<ComboBox ItemsSource="{x:Bind Logic.LotsOfColors}"
Margin="20"
Width="200"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemTemplate="{StaticResource ColorTemplate}"/>
Öğe şablonunun çalıştığını doğrulamak için uygulamayı yeniden çalıştırabilirsiniz.
6. Kullanıcı arabiriminin geri kalanını derleme
Kullanıcı arabirimi basittir. Tüm denetimler (açılan liste, Sık Kullanılanlara Ekle düğmesi, sık kullanılanlar listesi (üst bilgi metniyle) ve Sık Kullanılanlardan Kaldır düğmesi) tek bir dikey StackPanel
içinde iç içe yerleştirilmiş. Öğesinin tamamını <Grid>
aşağıdakilerle değiştirin:
<StackPanel>
<ComboBox ItemsSource="{Binding LotsOfColors}"
Margin="20, 20, 20, 0"
Width="200"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemTemplate="{StaticResource ColorTemplate}"
SelectedItem="{Binding SelectedColor, Mode=TwoWay}" />
<Button
Margin="20"
HorizontalAlignment="Left">Add to Favorites</Button>
<TextBlock
FontSize="25"
Margin="20, 20, 20, 0">Favorite colors</TextBlock>
<ListBox ItemsSource="{Binding FavoriteColors}"
ItemTemplate="{StaticResource ColorTemplate}"
Margin="20, 20, 20, 0"
HorizontalAlignment="Left"/>
<Button Margin="20"
HorizontalAlignment="Left">Remove from Favorites</Button>
</StackPanel>
içinde seçili durumdaki öğe ComboBox
ile SelectedColor
sınıfının özelliği ColorListDataContext
arasında bir TwoWay
bağlama vardır.
7. Düğme için Tıklama işleyicisi Add to Favorites
oluşturma
Yönteminde seçilen rengi FavoriteColors
listeye ekleme mantığını zaten uyguladık AddSelectedColorToFavorites
. Ancak, kullanıcı düğmeye tıkladığında bu yöntemi çağırmamız gerekir.
Visual Studio'da görsel tasarımcıdaki düğmeye çift tıklayın Add to Favorites
. Bu, arka planda kodda bir Button_Click
yöntem ve XAML'deki olayda Click
buna bir başvuru oluşturur:
<Button ... Click="Button_Click">Add to Favorites</Button>
Button_Click
yöntemini AddToFavorites_Click
hem codebehind hem de XAML'de olarak yeniden adlandırın. Bunu yapmak için kodda yeniden adlandırabilir ve ardından tornavida simgesini kullanarak "Yeniden adlandır Button_Click
AddToFavorites_Click
" seçeneğini belirleyebilirsiniz. Bu işlem, XAML dosyasındaki yöntemin adını da değiştirir.
.
öğesine erişmeyi ColorListDataContext
kolaylaştırmak için sınıfının en üstüne ColorList
bir convenience özelliği ekleyin:
private ColorListDataContext DC => (ColorListDataContext)DataContext;
Ardından yönteminde AddToFavorites_Click
sınıfından önceden yazılmış mantığı çağırın ColorListDataContext
:
private void AddToFavorites_Click(object sender, RoutedEventArgs e)
{
DC.AddSelectedColorToFavorites();
}
8. Uygulamayı çalıştırma
Uygulamayı şimdi çalıştırın, içinden ComboBox
bir renk seçin ve Sık Kullanılanlara Ekle düğmesini seçin. Hiçbir şey olmaz. sınıfındaki yöntemin AddSelectedColorToFavorites
ColorListDataContext
sonuna bir kesme noktası eklemek, kodun çalıştığını gösterir. Seçilen renk listeye eklenir FavoriteColors
.
Kullanıcı arabiriminin bu List<ColorDescriptor>
içindeki değişiklikleri yansıtmama nedeni, koleksiyon değiştiğinde kullanıcı arabiriminin bilgilendirilmesi gerektiğidir. Listeler için bu işlem arabirim üzerinden System.Collections.Specialized.INotifyCollectionChanged
yapılır. Neyse ki bunu uygulamamız gerekmiyor. Sınıfta System.Collections.ObjectModel.ObservableCollection<T>
ihtiyacımız olan her şey zaten var.
Uygulamamızın çalışmasını sağlamak için tek yapmamız gereken özelliği için FavoriteColors
sınıfı yerine List<T>
sınıfını kullanmaktırObservableCollection<T>
.
public ObservableCollection<ColorDescriptor> FavoriteColors { get; } =
new ObservableCollection<ColorDescriptor>();
Uygulamayı şimdi çalıştırıyorsanız, açılan listeden renkleri seçip Sık Kullanılanlara Ekle düğmesini seçmek artık düzgün çalışıyor. Seçilen sık kullanılan renkler öğesine ListBox
yansıtılır. Güzel!
9. Boş öğe eklemekten kaçının
Uygulamayı başlattığınızda, açılan listede seçili renk yoktur. Sık Kullanılanlara Ekle düğmesini seçtiğinizde 'null' öğelerin listeye eklenmesini önlemek için şu anda yönteminde bir null
denetimimiz AddSelectedColorToFavorites
var. Şimdi bunu değiştirerek açılan listede her zaman bir renk seçildiğinden emin olalım.
Denetim, null
Sık Kullanılanlara Ekle düğmesinin işlevsel olmadığında gösterilmesini engellemez. Bu nedenle, her zaman seçili bir öğe olduğundan emin olalım. Açılan listenin SelectedItem
özelliği koddaki özelliğe iki yönlü bağlı SelectedColor
olduğundan, bunu başlangıçta geçerli bir değere başlatalım. Oluşturucunun sonuna ColorListDataContext
aşağıdaki satırı ekleyin:
SelectedColor = LotsOfColors[0];
Bu, uygulama başlatıldığında listenin ilk öğesinin LotsOfColors
seçilmesini sağlar. Kullanıcı koleksiyona bir null
FavoriteColors
ekleyemez.
10. Sık kullanılan renkleri kaldırma
Sonraki adım, sık kullanılan renkleri 'den kaldırma özelliğini eklemektir ListBox
. Bu, kullanıcının içinde ListBox
bir öğe seçip Sık Kullanılanlardan Kaldır düğmesini seçmesi ile gerçekleşir.
Çalışma şekline ComboBox
benzer şekilde, kullanıcının özelliği aracılığıyla SelectedItem
içinde seçtiği öğeyi ListBox
izleyebiliriz. Bunu koddaki bir özelliğe bağlayabiliriz. Yeni özelliği sınıfına ColorListDataContext
aşağıdaki gibi ekleyin:
private ColorDescriptor? _selectedFavoriteColor;
public ColorDescriptor? SelectedFavoriteColor
{
get => _selectedFavoriteColor;
set
{
Set(ref _selectedFavoriteColor, value);
RaisePropertyChanged(nameof(IsRemoveFavoriteEnabled));
}
}
public bool IsRemoveFavoriteEnabled => SelectedFavoriteColor != null;
Yukarıdaki kod, sık kullanılanlar listesinden öğe kaldırma düğmesinin görünür olup olmayacağını denetlemek için bir Boole özelliği de içerir. herhangi bir değişiklik SelectedFavoriteColor
, kullanıcı arabiriminin bu özelliği sorgulamasına ve buna göre davranmasına neden olur.
Rengin sık kullanılanlar listesinden kaldırılmasını gerçekleştirmek için bir yöntem daha yazmamız gerekir.
public void RemoveFavoriteColor()
{
if (SelectedFavoriteColor == null) return;
FavoriteColors.Remove(SelectedFavoriteColor);
}
Ardından, 's SelectedItem öğesini özelliğine SelectedFavoriteColor
bağlayınListBox
. özniteliğini SelectedItem
içine ListBox
CodeList.xaml
ekleyin.
<ListBox SelectedItem="{Binding SelectedFavoriteColor, Mode=TwoWay}"... >
Sık Kullanılanlardan Kaldır düğmesini bağlamak için Sık Kullanılanlardan Kaldır düğmesinin XAML'sini bağlamanın yanı sıra olay işleyicisini IsEnabled
Click
de içerecek şekilde değiştirin.
<Button Margin="20"
HorizontalAlignment="Left"
Click="RemoveFromFavorites_Click"
IsEnabled="{Binding IsRemoveFavoriteEnabled}">Remove from Favorites</Button>
Mantığımızı çağırmak RemoveFromFavoriteColor
için ColorList.xaml.cs
yöntemine de eklememiz RemoveFromFavorites_Click
gerekir.
private void RemoveFromFavorites_Click(object sender, RoutedEventArgs e)
{
DC.RemoveFavoriteColor();
}
Uygulamayı şimdi çalıştırın ve sık kullanılan renklerin listesine renk ekleyebildiğinizi ve bunları kaldırabildiğinizi doğrulayın. Sık Kullanılanlardan Kaldır düğmesinin, kaldırılabilir bir sık kullanılan rengi seçili olup olmadığına göre nasıl devre dışı bırakıldığını ve etkinleştirildiğini unutmayın.
Alıştırma olarak, koleksiyon boş olduğunda kullanıcı arabiriminin Sık Kullanılan Renkler bölümünün tamamını gizlemeyi FavoriteColors
deneyin. İpucu: etkilenen denetimleri gruplandırmak ve 'nin Görünürlüğünü sınıftaki ColorListDataContext
bir özelliğe bağlamak StackPanel
için kullanınStackPanel
. Sık kullanılan bir renk eklendiğinde veya kaldırıldığında, bu özellikte yapılan değişiklikler hakkında kullanıcı arabirimini bilgilendirin.
Özet
Bu derste, özelliklerini bir C# özelliğine bağlayarak SelectedItem
veya ComboBox
ListBox
denetiminde seçili öğeyi nasıl edinebileceğiniz ve ayarlayabileceğiniz gösterilmiştir. Kodda kullanmanın ObservableCollection
kullanıcı arabiriminin birden çok öğe görüntüleyen denetimlerin içeriğini otomatik olarak güncelleştirmesine nasıl neden olduğunu da gördünüz.